bash“[:y:”意外的操作员

时间:2014-03-12 11:05:48

标签: bash

我有这个问题而且我不明白为什么 版本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

非常感谢

2 个答案:

答案 0 :(得分:3)

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

sh test.sh

而不是:

./test.sh

表示它以/bin/sh模式运行。正如[ :Unexpected operator in shell programming中所述,sh仅接受=而非==

答案 1 :(得分:0)

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

可能是因为Bash 4.x对语法很挑剔(我在Bash 3.2上),或者可能是你在运行它时没有指定Bash:

$ sh test.sh

在许多系统上,这将运行类似Bourne shell的东西。 (在我的,它在POSIX模式下运行Bash,所以它仍然有效)。 {B} shell中==不是有效的测试(尽管它适用于Bash和Kornshells)。使用单个等于(=)而不是双等于将解决此问题。

您还可以尝试使用标准换行符,而不是在if语句中使用现代方式行。试试这个:

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