Windows上的Bash while循环

Windows上的Bash while循环,windows,shell,Windows,Shell,我正在尝试移植一个shell脚本以在GNU for Windows上运行,GNU for 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,因此它似乎甚至没有进入

我正在尝试移植一个shell脚本以在GNU for Windows上运行,GNU for 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

我猜这是一个语法错误,但我不知道如何修复它。有什么建议吗?

在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
,因为它将在尝试执行之前输出每个解释的行。

在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
,因为它将在执行之前输出每一行解释的代码。

到底什么是“GNU for Windows”?你是说MinGW?可能是GnuWin32的东西。据我所知,它提供的不仅仅是MinGW.Oops的开发功能。我是说Windows上的GNU。它有点像Cygwin。@Firnagzen,它不像Cygwin。Cygwin提供了一个完整的Bash shell和相关的Unix用户空间。这只提供为win32编译的GNU实用程序(而不是Unix shell)。究竟什么是“GNU for Windows”?你是说MinGW?可能是GnuWin32的东西。据我所知,它提供的不仅仅是MinGW.Oops的开发功能。我是说Windows上的GNU。它有点像Cygwin。@Firnagzen,它不像Cygwin。Cygwin提供了一个完整的Bash shell和相关的Unix用户空间。这只提供为win32编译的GNU实用程序(而不是Unix shell)。该死的海森堡。当我回到家再次尝试时,它消失了。也许GoW的安装需要重新启动或者其他什么。该死的海森堡。当我回到家再次尝试时,它消失了。也许GoW安装需要重新启动或其他什么。