Когда квадратные скобки требуются в инструкции Bash if?


обычно я использую квадратные скобки в выражении if:

if [ "$name" = 'Bob' ]; then ...

но, когда я проверяю, если grep удалось я не использую квадратные скобки:

if grep -q "$text" $file ; then ...

когда квадратные скобки необходимы в if заявление?

3   51  

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.