#linux #string #shell #compare
#linux #строка #оболочка #Сравнить
Вопрос:
В чем разница между =
и ==
для сравнения строк в программировании в оболочке Linux?
Возможно, работает следующий код:
if [ "$NAME" = "user" ]
then
echo "your name is user"
fi
Но я думаю, что это неправильный синтаксис. Он будет использоваться для сравнения строки с помощью ==
инструкции.
Что правильно?
Ответ №1:
Единственное значение равно правильному
string1 == string2
string1 = string2
Верно, если строки равны. ‘=’ следует использовать с командой test для соответствия POSIX
NAME="rafael"
USER="rafael"
if [ "$NAME" = "$USER" ]; then
echo "Hello"
fi
Комментарии:
1. Ссылка: gnu.org/software/bash/manual/html_node /…
Ответ №2:
В общем, оператор = работает так же, как == при сравнении строк.
Примечание: Оператор сравнения == ведет себя иначе в тесте с двойными скобками, чем в одинарных скобках.
[[ $a == z* ]] # True if $a starts with an "z" (pattern matching).
[[ $a == "z*" ]] # True if $a is equal to z* (literal matching).
[ $a == z* ] # File globbing and word splitting take place.
[ "$a" == "z*" ] # True if $a is equal to z* (literal matching).
Комментарии:
1. Спасибо за это! Я боролся с проблемой, из-за которой я использовал одинарные квадратные скобки вместо двойных.
Ответ №3:
На этих страницах объясняются различные операторы сравнения в bash:
- http://www.tech-recipes.com/rx/209/bournebash-shell-scripts-string-comparison/
- http://tldp.org/LDP/abs/html/comparison-ops.html
- http://www.faqs.org/docs/Linux-HOWTO/Bash-Prog-Intro-HOWTO.html#ss11.2
На второй связанной странице вы найдете:
==
is equal to
if [ "$a" == "$b" ]
This is a synonym for =.
Комментарии:
1. Это возникало раньше Этот комментарий был сделан до того, как вы внесли несколько изменений в свой ответ
2. @Diarmaid Я знал, что это произойдет :). Является ли мой ответ грубым? Возможно, конечно, я просто потратил свое время на чтение вопроса, на поиск ответа на который требуется 10 секунд поиска в Google. Во всяком случае, я также потратил время на то, чтобы действительно ввести правильный ответ. Так что теперь оперативник получил и его ответ, и вежливое напоминание о том, что нужно сначала поискать.
3. Заключается ли идея SO в том, чтобы предоставить что-то лучшее, чем «10 секунд поиска ответа в Google»?
4. Сам этот ответ теперь является одним из первых попаданий в Google. Вот почему просто ответить «Погуглите это». не всегда хорошая политика. У StackOverflow действительно высокий рейтинг страницы, если вы не заметили.
5. Стоит отметить, что если это программа #!/ bin / sh, а не программа #! / bin / bash, я не могу использовать двойные знаки равенства на моем сервере Ubuntu 16.10. Я думаю, это то, на что намекает комментарий Джона Джотты о соответствии POSIX в его ответе ниже.