Синтаксис сравнения строк оболочки Linux
В чем разница между =
и ==
для сравнения строк в программировании оболочки Linux?
Возможно, работает следующий код:
if [ "$NAME" = "user" ]
then
echo "your name is user"
fi
Но я думаю, что это не правильный синтаксис. Он будет использоваться для сравнения строки с помощью инструкции ==
.
Что правильно?
Ответы
Ответ 1
На этих страницах объясняются различные операторы сравнения в bash:
На второй связанной странице вы найдете:
==
is equal to
if [ "$a" == "$b" ]
This is a synonym for =.
Ответ 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
Мне не нужно знать, какой оператор я должен использовать