
在 bash 中,var
當用雙括號(如(( 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 桌面 18.04.5 LTS 上使用 gnome-terminal。
答案1
來自這裡的信用:https://unix.stackexchange.com/questions/146773/why-bash-increment-n-0n-return-error
(( expression )) 的傳回值並未指示錯誤狀態,但是,從 bash 線上說明頁來看:
((表達式)) 表達式根據下面算術評估中所述的規則進行評估。如果表達式的值非零,則傳回狀態為0;否則回傳狀態為1。
你((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