【问题标题】:bash "[: y:" unexpected operator [duplicate]bash“[:y:”意外运算符[重复]
【发布时间】:2014-03-12 11:05:48
【问题描述】:

我有这个问题,我不明白为什么 版本 bash :4.2.45

#!/bin/bash
echo "ca va (y/n)?"
read answer
if [ "$answer" == "y" ];then echo "yes"
else echo "no"
fi

这是错误

ca va (y/n)?
y
test.sh: 13: [: y: unexpected operator
no

非常感谢

【问题讨论】:

  • test 没有== 操作(man test[ 只是同义词)。考虑将= 用于字符串或-eq 用于数字。
  • 这对我来说适用于 bash 4.2.37 ...
  • 为我工作。你如何运行你的 bash 脚本你能显示它吗?或尝试使用= 而不是==
  • 是的,它奏效了。只有“=”,没有“==”。非常感谢

标签: bash


【解决方案1】:

该脚本可以作为 Bash 脚本正常工作。但是,您遇到的错误是因为您将其运行为:

sh test.sh

而不是:

./test.sh

这意味着它正在/bin/sh 模式下运行。如[ :Unexpected operator in shell programming 中所述,sh 仅接受 = 而不是 ==

【讨论】:

    【解决方案2】:

    我在我的系统上试过了,它似乎工作正常。

    这可能是因为 Bash 4.x 对语法很挑剔(我使用的是 Bash 3.2),也可能是您在运行时没有指定 Bash:

    $ sh test.sh
    

    在许多系统上,它会运行类似于 Bourne shell 的东西。 (对我来说,它在 POSIX 模式下运行 Bash,所以它仍然可以工作)。 == 在 Bourne shell 中不是有效的测试(尽管它在 Bash 和 Kornshells 中有效)。使用单等号 (=) 而不是双等号将解决此问题。

    您也可以尝试在if 语句中使用标准换行符代替现代换行方式。试试这个:

    #!/bin/bash
    echo "ca va (y/n)?"
    read answer
    if [ "$answer" = "y" ]
    then
        echo "yes"
    else
         echo "no"
    fi
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多