如果變數設為 0,則增量運算子對變數不起作用

如果變數設為 0,則增量運算子對變數不起作用

在 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

這對我有用(在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

相關內容