Когда квадратные скобки требуются в операторе bash if?
обычно я использую квадратные скобки в операторе if:
if [ "$name" = 'Bob' ]; then ...
но, когда я проверяю, если grep успешно я не использую квадратные скобки:
if grep -q "$text" $file ; then ...
когда квадратные скобки необходимы в if заявление?
3 ответов
квадратные скобки являются синонимом . Ан if оператор проверяет состояние выхода команды, чтобы решить, какую ветвь взять. grep -q "$text" команда, но "$name" = 'Bob' не--это просто выражение. test - это команда, которая принимает выражение и вычисляет его:
if test "$name" = 'Bob'; then ...
С квадратных скобках синоним test команда, вы можете переписать ее как исходное утверждение:
if [ "$name" = 'Bob' ]; then ...
лучший способ думать о [ ... ] синтаксис, чтобы рассмотреть [ программа - что это такое!
зацени вот это:
~ $ ls /usr/bin/\[
/usr/bin/[
С другой стороны, вы, вероятно, не используете эту версию с bash предоставляет [ как встроенная оболочка.
в любом случае, чтобы ответить на ваш вопрос: что if does запускает команду, которую вы ему даете, и видит, что возвращаемое значение 0 или нет. Вы используете [ сделать другие, более интересные сравнения как сравнения строк. См.man [ и man bash.