![如果变量设置为 0,则增量运算符对变量不起作用](https://linux22.com/image/943215/%E5%A6%82%E6%9E%9C%E5%8F%98%E9%87%8F%E8%AE%BE%E7%BD%AE%E4%B8%BA%200%EF%BC%8C%E5%88%99%E5%A2%9E%E9%87%8F%E8%BF%90%E7%AE%97%E7%AC%A6%E5%AF%B9%E5%8F%98%E9%87%8F%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
var
在 bash 中,当变量被括在双括号中时,可以增加变量,例如(( var++ ))
。但我发现,如果变量事先设置为 0,例如 ,它就会失败var=0
。
$ a=0
$ ((a++)) && echo "command succeeded" || echo "command failed"
command failed
$ a=1
$ ((a++)) && echo "command succeeded" || echo "command failed"
command succeeded
有人可以解释这种行为吗?
环境:
我在 Ubuntu Desktop 18.04.5 LTS 上使用 gnome-terminal。
答案1
来源:https://unix.stackexchange.com/questions/146773/why-bash-increment-n-0n-return-error
((表达式))的返回值并不表示错误状态,但是,从bash手册页来看:
((expression)) 根据下面算术求值中描述的规则对表达式进行求值。如果表达式的值非零,则返回状态为 0;否则返回状态为 1。这与 let "expression" 完全等同。
您正在((a++))
执行后增量。 的值a
是,0
因此1
被返回,之后,它被增量。
比较
$ unset a
$ ((a++)) ; echo Exitcode: $? a: $a
Exitcode: 1 a: 1
相对
$ unset a
$ ((++a)) ; echo Exitcode: $? a: $a
Exitcode: 0 a: 1
一个预增量,因此a
已成为1
并被0
返回。
答案2
这对我有用(在bash
Ubuntu 中),
$ a=0
$ echo $((a++))
0
$ echo $((a++))
1
$ echo $((a++))
2
$ echo $((a++))
3
$ echo $a
4
注意
$ a=0
$ echo $((++a))
1
$ echo $((++a))
2
$ echo $((++a))
3
$ echo $a
3