我使用以下内容制作 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)
| 归档时间: |
|
| 查看次数: |
628 次 |
| 最近记录: |