Root
以 root 身份執行 ((x++)) 時出錯
我使用以下內容製作 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))