Значение двойных квадратных скобок в bash
В этом вопросе в ответе от Kyle Brandt конструкция [[ ]]
описывается как "встроенная тестовая команда bash". В качестве примера показано следующее.
if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
Почему двойные квадратные скобки, буквально [[ ]]
, необходимы?
Ответы
Ответ 1
[[является гораздо более универсальной версией [in bash.
Например, использование тестовой конструкции [[...]], а не [...], может помешать многим логическим ошибкам в сценариях. Например, операторы &, ||, < и > работают в тесте [[]], несмотря на то, что они выдают ошибку в конструкции [].
также, их реализации различны
-bash-3.2$ type [
[ is a shell builtin
-bash-3.2$ type [[
[[ is a shell keyword
Обратитесь здесь за хорошее объяснение
Ответ 2
[[ ]]
равны ключевому слову test
.
Вы также можете использовать [ ]
, но [[ ]]
несовместим со всеми типами оболочки
Для меня, если я понимаю реальное чувство вопроса, вопрос сам по себе плохо сформулирован.
Эти скобки должны быть здесь не столько для определения порядка, а потому, что для них требуется bash резюме
Изменить
Вопрос изменен, поэтому мой ответ тоже.
[[ ]]
используется для [ ]
, потому что вам не нужно беспокоиться о цитировании левой части теста, который будет читаться как переменная.
Более того, <
и >
не нужно экранировать