Синтаксис строки программирования в оболочке Linux - PullRequest
17 голосов
/ 21 апреля 2011

В чем разница между = и == для сравнения строк в программировании оболочки Linux?

Может быть, работает следующий код:

if [ "$NAME" = "user" ]
then
    echo "your name is user"
fi

Но я думаю, что это неправильный синтаксис. Он будет использоваться для сравнения строки с помощью оператора ==.

Что правильно?

Ответы [ 4 ]

23 голосов
/ 21 апреля 2011

Верно одинарное равенство

строка1 == строка2

строка1 = строка2

Истина, если строки равны.'=' должен использоваться с командой теста для соответствия POSIX

NAME="rafael"
USER="rafael"
if [ "$NAME" = "$USER" ]; then
    echo "Hello"
fi
11 голосов
/ 21 апреля 2011

В общем случае оператор = работает так же, как и ==, при сравнении строк.

Примечание: Оператор сравнения == в тесте с двойными скобками ведет себя иначе, чем в одиночных скобках.

[[ $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

4 голосов
/ 21 апреля 2011

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

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

==

    is equal to

    if [ "$a" == "$b" ]

    This is a synonym for =.
1 голос
/ 21 апреля 2011

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

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

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

...