我正在尝试移植一个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 debug2s和debug3。
我猜这是一个语法错误,但我不知道如何解决这个问题。有什么建议吗?
答案 0 :(得分:1)
在Linux下的bash
下工作正常(应该如此),甚至在我在CygWin中的相对古老的bash
下:
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]"
您可能还希望在脚本的顶部放置一个set -x
,因为它会在尝试执行之前输出每个已解释的行。