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

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

我使用以下内容制作 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`

相关内容