为什么[“$ foo”==“$ bar”]在bash中总是如此?

时间:2018-01-20 00:09:11

标签: bash string-comparison

我试图将用户输入与字符串进行比较 这是我的代码

Encode="Encode"
Decode="Decode"

printf "Enter name of file: "
read fileName
printf "Encode Or Decode: "
read EncOrDec

if [ "$Encode"=="$EncOrDec" ]; then
    printf "Encode Nice\n"
elif [ "$Decode"=="$EncOrDec" ]; then
    printf "Decode Nice\n"
else
    printf "Nothing\n"
fi

它总是转到Encode语句,为什么? 以及如何解决它

1 个答案:

答案 0 :(得分:3)

在bash中,空格很重要。替换:

if [ "$Encode"=="$EncOrDec" ]; then

使用:

if [ "$Encode" = "$EncOrDec" ]; then

没有空格,bash只是测试字符串"$Encode"=="$EncOrDec"是否为空。由于从不为空,因此始终执行then子句。

此外,作为次要细节,当使用[...]时,=用于字符串相等是POSIX标准。 Bash接受==,但==不是标准的,并且不会可靠移植。

同样适用于elif行。替换:

elif [ "$Decode"=="$EncOrDec" ]; then

使用:

elif [ "$Decode" = "$EncOrDec" ]; then