Подтвердить что ты не робот

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

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

Возможно, работает следующий код:

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

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

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

4b9b3361

Ответ 2

Единственное равное правильно

string1 == string2

string1 = string2

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

NAME="rafael"
USER="rafael"
if [ "$NAME" = "$USER" ]; then
    echo "Hello"
fi

Ответ 3

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

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

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

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

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

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