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