Почему [ "$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