我使用以下内容制作 bash 脚本 temp.sh:
age=0;
((age++));
当我以普通用户身份运行它时,它运行良好。
但是当我以 root 身份运行它时,出现错误:
./temp.sh: 4: ./temp.sh: 年龄++: 未找到
这是为什么?
答案1
在没有 hashbang 的情况下,/bin/sh
很可能会被使用。某些 POSIX shell 确实支持++
and--
运算符以及((...))
算术求值,但不是必需的。
由于您的示例中没有包含 hashbang,因此我假设您没有使用 hashbang,因此您的脚本可能在不支持所述运算符的 POSIX shell 中运行。这样的 shell 将解释((age++))
为age++
在两个嵌套的子 shell 内运行的命令。
当您以“普通”用户身份运行它时,它可能会被 bash 或其他支持所述运算符 和 的 shell 解释((...))
。
有关的:哪个 shell 解释器运行不带 shebang 的脚本?
要解决此问题,您可以将 hashbang 添加到脚本中:
#!/bin/bash
age=0
((age++))
注意:您不需要;
在 bash/shell 中使用 来终止行。
要使您的脚本可移植到所有 POSIX shell,您可以使用以下语法:
age=$((age + 1))
age=$((age += 1))
答案2
另一个旧的答案(或高度多平台兼容)是:
age=`expr $age + 1`