Root

以 root 身份執行 ((x++)) 時出錯

  • May 16, 2019

我使用以下內容製作 bash 腳本 temp.sh:

age=0;
((age++));

當我以普通使用者身份執行它時,它執行良好。

但是當我以root身份執行它時,我得到了錯誤:

./temp.sh:4:./temp.sh:age++:未找到

這是為什麼?

在沒有 hashbang 的情況下,/bin/sh很可能正在使用。一些 POSIX shell 確實支持++and--運算符和((...))算術評估,但不是必須的。

由於您的範例中沒有包含 hashbang,因此我假設您沒有使用 hashbang,因此您的腳本可能在不支持所述運算符的 POSIX shell 中執行。這樣的 shell 將解釋((age++))age++在兩個嵌套的子 shell 中執行的命令。

當您以“普通”使用者身份執行它時,它可能會被 bash 或其他支持所述運算符和((...)).

相關:哪個 shell 解釋器執行沒有 shebang 的腳本?

要解決此問題,您可以在腳本中添加 hashbang:

#!/bin/bash
age=0
((age++))

注意:您不需要;在 bash/shell 中終止行。


要使您的腳本可移植到所有 POSIX shell,您可以使用以下語法:

age=$((age + 1))
age=$((age += 1))

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