Bash 脚本 while 循环将不起作用:“-le unary operator expected”

Bash script while loop won't work: "-le unary operator expected"

我正在尝试 运行 像这样的 bash 脚本:

#!/bin/bash

set i=1991

while [ $i -le 2017 ]
do
    echo "looping and doing stuff"
    $i++
done
echo all done

我收到以下错误:

[: -le: unary operator expected

我也试过像这样更改代码:

 #!/bin/bash

set i=1991


while (( $i <= 2017 ));
do
    echo "looping";
    (( $i++ ));
done

echo ALL done

这给了我这个错误:

((: <= 2017 : syntax error: operand expected (error token is "<= 2017 ")

我已经试过了:

#!/bin/bash

set i=1991

while [ "$i" -le "2017" ]
do
    echo "looping"
    $i++
done

echo ALL done

我明白了:

[: : integer expression expected

我认为这是一个愚蠢的语法错误,但不幸的是我似乎无法弄清楚。我的 bash 版本是 4.3.48。

谢谢!

set用于设置位置参数,不是普通变量

$ unset i
$ set i=1991
$ echo ""
i=1991
$ echo "$i"

$

i=1991set 的单个参数,被视为文字字符串,而不是任何类型的赋值。

只需放下 set:

i=1991
while (( i < 2017 )); 
  ...
  ((i++))
done