Операторы равенства Bash ( = = , - eq)



может кто-нибудь объяснить разницу между -eq и == в bash скриптах?



есть ли разница между следующими?



[ $a -eq $b ]
и [ $a == $b ]



это просто == используется только тогда, когда переменные содержат цифры?

512   4  

4 ответов:

все наоборот:== для сравнения строк, -eq для числовых. -eq находится в той же семье, что и -lt,-le,-gt,-ge и -ne, если это поможет вам вспомнить, что есть что.

$ [ a == a ]; echo $?
0
$ [ a -eq a ]; echo $?
-bash: [: a: integer expression expected
2

== это Баш-изм. Форма POSIX-это =. Если важна переносимость в оболочки без bash, используйте =.

==-это специфичный для bash псевдоним для = и он выполняет строковое (лексическое) сравнение вместо числового сравнения. eq будучи числовым сравнением, конечно.

наконец, я обычно предпочитаю использовать форму if [ "$a" == "$b" ]

зависит от

ребята: несколько ответов показывают опасные примеры. Пример ОП [ $a == $b ] специально используется подстановка некотируемых переменных (по состоянию на 17 октября edit). Ибо [...] это безопасно для равенства строк.

но если вы собираетесь перечислить альтернативы, как [[...]], вы также должны сообщить, что правая сторона должна быть процитирована. Если не цитируется, это шаблон матча! (От bash man page: "любая часть шаблона может быть процитирована, чтобы заставить ее соответствовать в виде строки.").

здесь в bash два оператора, дающие "да", соответствуют шаблону, другие три-равенство строк:

$ rht="A*"
$ lft="AB"
$ [ $lft = $rht ] && echo yes
$ [ $lft == $rht ] && echo yes
$ [[ $lft = $rht ]] && echo yes
yes
$ [[ $lft == $rht ]] && echo yes
yes
$ [[ $lft == "$rht" ]] && echo yes
$

Comments

    Ничего не найдено.