bash if-else和变量赋值

bash if-else和变量赋值,bash,Bash,如何在变量赋值之间添加if-else 比如: var="statement "[ $var2 -eq 0 ] && "is true" || "is false" 我想避免: if [ $var2 -eq 0 ]; then var="statement is true" else var="statement is false" fi 这能做到吗 谢谢请: [ "$var2" -eq 0 ] && var="statement is true

如何在变量赋值之间添加if-else

比如:

var="statement "[ $var2 -eq 0 ] && "is true" || "is false"
我想避免:

if [ $var2 -eq 0 ]; then
    var="statement is true"
else
    var="statement is false"
fi
这能做到吗

谢谢

请:

[ "$var2" -eq 0 ] && var="statement is true" || var="statement is false"
从技术上讲,
var=“statement is false”
将在
[“$var2”-eq 0]
var=“statement is true”
失败时运行,但
var=“statement is true”
的失败概率几乎为零。

$(…)
表达式嵌套在双引号对中

因此,您可以执行以下操作:

var="abc$( (($var2==0)) && printf '%s' ' is true' || printf '%s' ' is false')"

我不确定是否有好的编码方法,但这里有两种简洁的方法(如果您使用这些方法,请在代码中添加注释)

这种方法初始化变量“var”,并计算“var1”(也不要使用这些变量名,即使是在向SO发送的帖子中),以查看它是否为非零值/空值。然后附加true或false

var="statement is "
(($var1)) && var+=true || var+=false
另一种方法是更改逻辑,如果为false,则将var设置为“”(nothing),如果为true,则将var设置为“true”。然后将一个未设置的变量默认设置为“false”,如果设置了,则返回分配给它的true。Man bash,搜索“:-”以获取更多信息

var="statement is ${var1:-false}"

不是直接的,不是。根据变量是否未定义(或定义但为空),有些字符串替换的行为会有所不同,但没有任何内容将字符串
“0”
视为特别重要。对于真正不透明的解决方案,您可以利用以下事实:将设置
$0
,但在没有参数的函数中,其他位置参数将为空。不要避免使用较长的形式。从长远来看,你提出的任何更短的方法都不太清晰,也不值得。我觉得我写了一个令人讨厌的东西。预先填充一个数组
bool=(false-true)
,然后用比较直接索引它
printf'abc是%s\n'${bool[var2==0]}“
。(如果
var2
是{0,1}值,显然,您甚至不需要比较。)