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