以 root 身份运行 ((x++)) 时出错

joh*_*nes 5 root

我使用以下内容制作 bash 脚本 temp.sh:

age=0;
((age++));
Run Code Online (Sandbox Code Playgroud)

当我以普通用户身份运行它时,它运行良好。

但是当我以 root 身份运行它时,出现错误:

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

这是为什么?

jes*_*e_b 12

在没有 hashbang 的情况下,/bin/sh很可能正在使用。某些 POSIX shell 确实支持++--运算符,以及((...))用于算术计算,但不是必需的。

由于您没有在示例中包含 hashbang,我假设您没有使用 hashbang,因此您的脚本可能在不支持所述运算符的 POSIX shell 中运行。这样的 shell 将解释((age++))age++在两个嵌套的子 shell 中运行的命令。

当您以“普通”用户身份运行它时,它可能会被 bash 或其他支持所述运算符和((...)).

相关:哪个 shell 解释器运行一个没有 shebang 的脚本?

要解决此问题,您可以在脚本中添加一个 hashbang:

#!/bin/bash
age=0
((age++))
Run Code Online (Sandbox Code Playgroud)

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


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

age=$((age + 1))
age=$((age += 1))
Run Code Online (Sandbox Code Playgroud)

  • 或者使用标准的`sh`语法:`age=$((age + 1))`,或`: "$((age += 1))"` (4认同)
  • `./temp.sh: 4: ./temp.sh: age++: not found` 的确切输出是由 dash 运行名为 `./temp.sh` 的脚本生成的。那似乎是根外壳。 (2认同)