代码之家  ›  专栏  ›  技术社区  ›  ellen

Bash脚本while循环不起作用:“-le一元运算符应为”[重复]

  •  0
  • ellen  · 技术社区  · 6 年前

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   chepner    6 年前

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

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

    i=1991 设置 ,被视为文本字符串,而不是任何类型的赋值。

    设置

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