【发布时间】:2018-08-28 10:39:25
【问题描述】:
我正在学习 shell 脚本(更专注于 sh shell 而不是 Bash shell),我编写了一个简单的脚本来测试 sh shell 中的 while 语句。
但是当我运行它时,我得到了这个错误......
test.sh: 8: test.sh: 10: not found
10
但是当我使用 bash 执行脚本时,它运行时没有问题(即使脚本上有 #!/bin/sh)。有人可以解释为什么吗?两个 shell 上的 while 语句是否不同?
几点说明:
-
通过调试脚本发现了运行脚本的“解决方案”:
bash -x test.sh 我的用户的权限是
rwx,所有其他用户的权限是r。将
#!/bin/sh更改为/bash,但没有真正改变(仍然使用 sh 运行它,我知道这很愚蠢,但有时愚蠢的事情会起作用)。-
代码非常简单明了,它只是一个变量和一个带有变量回显的 while 语句,所以我猜没有语法错误(因为它在 Bash shell 中运行)。
我使用的是 Ubuntu 18.04.1 LTS (x86_64)。
脚本所在目录包含在
$PATH中。尝试使用
sudo,但同样的事情,在 Bash 上有效,在 sh 上失败。
编辑:
#!/bin/sh
var=10
while [ $var -gt 0 ]
do
echo $var
var=$[ $var - 1 ]
done
【问题讨论】:
-
@IMN01
$[是 Bash 的东西(如果我错了,请纠正我)。 -
@Biffen 无法真正纠正你,因为我知道的不多,但看起来是这样:D
-
我建议您在脚本中使用
shellcheck:它会报告52055888.sh:7:13: warning: In POSIX sh, $[..] in place of $((..)) is undefined. [SC2039]。