Bash脚本while循环无法正常工作:“ -le一元运算符应为”

时间:2018-09-19 18:09:57

标签: bash ubuntu-16.04

我试图像这样运行bash脚本:

function long_string(arr) {
    let longest = arr[0];
    for (let i = 1; i < arr.length; i++) {
        if (arr[i].length > longest.length) {
            longest = arr[i];
        }
    }
    return longest;
}

let arr = ["Orebro", "Sundsvall", "Hudriksvall", "Goteborg"];

console.log(long_string(arr));

我收到以下错误:

#!/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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

$

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

只需丢弃set

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