Bash

Shell 腳本與 bash 一起執行,但不與 sh 一起執行。為什麼以及如何解決它?

  • May 12, 2020

我有以下 shell 腳本,它總結了傳遞給它的所有參數(空格分隔):

sum=0
for arg in "$@"; do
   (( sum += arg ))
done
echo $sum

我已將其保存為SumAll.sh. 因此,它的功能應該如下:

sh SumAll.sh 2 4 6 8
20

或者

bash SumAll.sh 1 -2 3 -3
-1

兩者都可以在我的本地電腦(MacBook)上執行,但是當我在 linux 伺服器上嘗試相同的操作時,執行腳本可以bash正常工作,但sh不能正常工作。我收到以下錯誤:

sum: '+=': No such file or directory
sum: arg: No such file or directory

這是為什麼?我該如何解決?

算術評估(( ... ))是對實現的標準 POSIX shell 語法的擴展bash。大多數shshell 無法理解該語法。

改用算術替換:sum=$(( sum + arg ))

在不實現非標準的 shell 中(( ... )),您的(( sum += arg ))命令將被解釋為嵌套子 shell,sum使用兩個參數呼叫命令+=arg

在 macOS 上,sum是一個計算文件校驗和的實用程序(請參閱 參考資料man sum),以及無法找到的文件+=arg這就是您收到該特定錯誤的原因)。

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