Bash

為什麼“$(())”命令的輸出為 0?

  • March 17, 2021

我使用了$(())命令,我看到了這個錯誤:

bash: 0: command not found

為什麼會出現這個錯誤?

$(( ))算術替換或算術擴展。在其中,您可以進行(整數)算術運算,shell 將執行它們並將整個表達式替換為這些運算的結果。

你經常看到它像在

count=$(( count + 1 ))

由於這裡 shell 沒有什麼可做的(算術替換為空),因此您的bashshell 決定結果為零。

您將其用作命令,這意味著 shell 將嘗試將結果 ,0作為命令執行。

它失敗了,並告訴你原因(“0:找不到命令”)。


這是一個空的算術替換,似乎是一個極端情況,在不同的 shell 中被不同地對待。bashshell 與zshand pdksh(在kshOpenBSD 上)一起嘗試執行0, whiledashyash抱怨:

$ dash -c '$(( ))'
dash: 1: arithmetic expression: expecting primary: " "
$ yash -c '$(( ))'
yash: arithmetic: a value is missing

POSIX標准

作為擴展,shell 可以辨識超出列出的算術表達式。

… 這可能是bash,zshpdksh所做的(即,他們將空表達式辨識為“零”)。

引用自:https://unix.stackexchange.com/questions/639788