在bash中将变量设置为具有两个字符串比较的布尔值的正确语法

在bash中将变量设置为具有两个字符串比较的布尔值的正确语法,bash,Bash,如何正确设置ISIOPublicVersion?如果$os 设置为ios,$version设置为public isIosPublicVersion= [[ "${os}" == "ios" && "${version}" == "public" ]] if [[ -n $upload ]] && [[ !$isIosPublicVersion ]]; then echo "upload true" else echo "upload false" fi

如何正确设置
ISIOPublicVersion
?如果
$os
设置为
ios
$version
设置为public

isIosPublicVersion= [[ "${os}" == "ios" && "${version}" == "public" ]]
if [[ -n $upload ]] && [[ !$isIosPublicVersion ]]; then
  echo "upload true"
else
  echo "upload false"
fi

if case设置是否正确?

[[
不会产生任何输出,因此您无法像尝试过的那样分配给变量。即使它确实产生了输出,您的语法也会不正确,因为将命令的输出分配给变量的方式是
变量=$(command)

[[
的工作方式是在条件求值为true时返回success,因此如果需要,可以使用临时布尔值,方法是将第一行更改为如下内容:

[[ "${os}" == "ios" && "${version}" == "public" ]] && isIosPublicVersion=1
if [[ -n $upload ]] && [[ $isIosPublicVersion -ne 1 ]]
或者,您可以使用以下函数:

isIosPublicVersion() { [[ "${os}" == "ios" && "${version}" == "public" ]]; }
if [[ -n $upload ]] && !isIosPublicVersion

函数的返回码等于上次计算的命令的返回码。

我尝试了您的解决方案,但效果不理想。请参阅:@mles第一个命令中有错误,我已编辑以更正该错误。