1

我正在尝试移植一个 shell 脚本以在 GNU for Windows 上运行,它为 Windows 提供了一个 bash shell。我遇到了一个问题:

while [ $no -le $number ]

好像没有注册。作为测试,我尝试了

no=1
number=10
echo debug1
while [ $no -le $number ]
do
echo debug2
no=$((no+1))
done
echo debug3

这将返回 debug1 和 debug3,因此它似乎甚至没有进入循环。

no=1
echo debug1
while [ $no -le 10 ]
do
echo debug2
no=$((no+1))
done
echo debug3

另一方面,这可以工作,并为我提供了 debug1、10 个 debug2 和 debug3。

我猜这是一个语法错误,但我不知道如何解决这个问题。有什么建议么?

4

1 回答 1

1

这在 Linux 下运行良好(应该如此)bash,甚至在bash我在 CygWin 中使用的相对古老的版本下:

pax> number=10
pax> no=1 ; while [ $no -le $number ] ; do echo $no ; no=$((no+1)) ; done
1
2
3
4
5
6
7
8
9
10

我唯一的建议是在您尝试进入while循环之前打印出这两个变量,并在该no=$((no+1))行之后打印出,以防出现问题,例如:

echo "[$no] [$number]"

您可能还想将 aset -x放在脚本的顶部,因为它会在尝试执行之前输出每个解释的行。

于 2013-05-30T08:06:35.653 回答