Когда квадратные скобки требуются в операторе 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.