我想减少一个变量'x',但是如果递减x得到0,我想将一个sentinel值(比如'hello')存储到x中。
我可以用两个表达式来做到这一点:
x=$((x - 1))
[[ "$x" -eq "0" ]] && x=hello
是否有一个优雅的单行做这个?我一直在尝试数学评估和三元运算符
x=1
echo $((x-1 == 0 ? "hello" : x-1))
永远不会打印hello
,它只打印0
。
您可以使用(( ))
来评估其内容是否为非零,如果不是,则可以有条件地执行命令:
$ x=1
$ (( --x )) || x='hello'
$ echo "$x"
hello
如果内部表达式求值为非零,则(( ))
被计算为true(退出状态0):
(( 1 ))
是真的(( 0 ))
是假的如果在评估之前(( --x ))
为1,则x
是假的。
如果三元运算符确实使用了字符串和数字,那么这也可以写成
(( x = x-1 ? x-1 : 'hello' ))
但是字符串在Bash的算术上下文中计算为0。