如果变量设置为 0,则增量运算符对变量不起作用

如果变量设置为 0,则增量运算符对变量不起作用

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

这对我有用(在bashUbuntu 中),

$ 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

相关内容