5

при сравнении двух целых чисел в bash нужно ли ставить двойные кавычки? В официальном документе http://tldp.org/LDP/abs/html/comparison-ops.html я могу прочитать, что двойные кавычки должны появляться каждый раз ... Но каковы различия в следующих примерах:

[ "$VAR" -eq "1" ]
[ $VAR -eq "1" ]
[ "$VAR" -eq 1 ]
[ $VAR -eq 1 ]

Как мне любопытно, a взглянул на сценарии инициализации Ubuntu в /etc/init.d, и в нем много примеров арифметического сравнения, по крайней мере ["$ VAR" -eq "1"] и [$ VAR -eq 1] используются ... но, кажется, никто действительно "не знает", каков официальный способ сделать это.

Спасибо !

2 ответа2

4

Вам нужно заключить в кавычки $VAR если он может быть пустым / неустановленным (поэтому вы, вероятно, должны всегда указывать его в кавычках).

Если вы не цитируете его, и оно пустое, в результате вы получите:

[ -eq 1 ]

что является синтаксической ошибкой. Цитирование 1 ничего не дает, хотя.

(Также посмотрите на условные выражения bash (вещи с [[ ... ]]), более "современной" версией тестовой команды, которая имеет меньше причуд.)

2

Если вы хотите провести арифметическое сравнение, используйте условную арифметическую конструкцию (задокументировано здесь):

(( VAR == 1 ))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .