bash不承认双位数字

我有这样的脚本:

#!/bin/bash let sleepCount=0 while [[ $sleepCount < 15 ]]; do let sleepCount++ sleep 1 echo $sleepCount done 

我期望它给出1到15的序列。然而,它给出1和2后退出。我改变了15到5,然后我得到了1到5.所以,看起来bash不认识到两位数字和只是取得领先的数字。 那么,我怎样才能达到我最初的目的呢?

顺便说一句,这是bash的一些版本信息:

 bash --version GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu) 

使用-lt而不是<

 #!/bin/bash let sleepCount=0 while [[ $sleepCount -lt 15 ]]; do let sleepCount++ sleep 1 echo $sleepCount done 

lt检查$sleepCount是否小于 15

编辑:

<执行字符串比较。 要清楚地考虑下面的命令

 $[[ 0 < 15 ]] $ echo $? 0 $ [[ 1 < 15 ]] $ echo $? 0 $ [[ 2 < 15 ]] $ echo $? 1 $ [[ 3 < 15 ]] $ echo $? 1 $ [[ 4 < 15 ]] $ echo $? 1 $ [[ 44 < 15 ]] $ echo $? 1 $ [[ 44 < 5 ]] $ echo $? 0 $ [[ "a" < "b" ]] $ echo $? 0 $ [[ "b" < "a" ]] $ echo $? 1 

使用算术表达式

您可以使用算术表达式来代替条件表达式。

 let sleepCount=0 while (( $sleepCount < 15 )); do let sleepCount++ sleep 1 echo $sleepCount done 

你的问题已经被很好的回答了。 我只是补充一点,你可以从C风格的循环中获益:

 #!/bin/bash for((sleepcount=1;sleepcount<=15;++sleepcount)); do sleep 1 echo "$sleepcount" done