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
Run Code Online (Sandbox Code Playgroud)
有人可以解释这种行为吗?
环境:
我在 Ubuntu 桌面 18.04.5 LTS 上使用 gnome-terminal。
van*_*ium 10
来自这里的信用: https: //unix.stackexchange.com/questions/146773/why-bash-increment-n-0n-return-error
(( expression )) 的返回值并不指示错误状态,但是,从 bash 联机帮助页来看:
((表达式)) 表达式根据下面算术评估中描述的规则进行评估。如果表达式的值非零,则返回状态为0;否则返回状态为1。这与let“表达式”完全相同。
你正在((a++))做一个后期增量。的值a因此0被1返回,之后递增。
比较
$ unset a
$ ((a++)) ; echo Exitcode: $? a: $a
Exitcode: 1 a: 1
Run Code Online (Sandbox Code Playgroud)
相对
$ unset a
$ ((++a)) ; echo Exitcode: $? a: $a
Exitcode: 0 a: 1
Run Code Online (Sandbox Code Playgroud)
预增量,因此a已成为1并被0返回。
这对我有用(在bashUbuntu 中),
$ a=0
$ echo $((a++))
0
$ echo $((a++))
1
$ echo $((a++))
2
$ echo $((a++))
3
$ echo $a
4
Run Code Online (Sandbox Code Playgroud)
注意与的区别
$ a=0
$ echo $((++a))
1
$ echo $((++a))
2
$ echo $((++a))
3
$ echo $a
3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3295 次 |
| 最近记录: |