Сравнение синтаксиса строки программирования оболочки Linux

#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).
  

источник: http://tldp.org/LDP/abs/html/comparison-ops.html

Комментарии:

1. Спасибо за это! Я боролся с проблемой, из-за которой я использовал одинарные квадратные скобки вместо двойных.

Ответ №3:

На этих страницах объясняются различные операторы сравнения в bash:

На второй связанной странице вы найдете:

 ==

    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 в его ответе ниже.

Ответ №4:

вы можете взглянуть здесь или здесь. Лично для сравнения строк я использую case

 case "$string1" in
  "$string2" ) echo "matched";;
  *) echo "not matched";;
esac
  

Мне не нужно знать, какой оператор я должен использовать