我使用以下内容制作 bash 脚本 temp.sh:
age=0;
((age++));
当我以普通用户身份运行它时,它运行良好。
但是当我以root身份运行它时,我得到了错误:
./temp.sh:4:./temp.sh:age++:未找到
这是为什么?
我使用以下内容制作 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:
注意:您不需要
;
在 bash/shell 中终止行。要使您的脚本可移植到所有 POSIX shell,您可以使用以下语法:
另一个旧时答案(或高度多平台兼容)是: