Почему [ "$foo"=="$bar" ] всегда верно в bash?

Я пытался сравнить ввод пользователя между строкой Вот мой код

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 ответ

Решение

В bash пробелы считаются. Заменить:

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

С:

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

Без пробелов bash просто проверяет, является ли строка "$Encode"=="$EncOrDec" пусто или нет. Поскольку он никогда не бывает пустым, then предложение всегда выполняется.

Также, как незначительная деталь, при использовании [...], использование = для равенства строк это стандарт POSIX. Баш принимает == но == не является стандартным и не будет надежно переносимым.

То же самое относится к elif линия. Заменить:

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

С:

elif [ "$Decode" = "$EncOrDec" ]; then
Другие вопросы по тегам