Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Разница между условными выражениями с использованием [ и [[

Автор вопроса: contrapositiveОтветов: 2

В чем точная разница между:

if [ $? -ne 0 ];

и

if [[ $? -ne 0 ]];
  • [ - это (обычно) имя программы. Это должно помочь объяснить некоторые различия. 29.06.2012
  • В bash [ является встроенной программой (попробуйте type [), но [ часто также является внешней программой. Michael Hoffman 29.06.2012
  • См. BashFAQ/031. Dennis Williamson 29.06.2012
  • Также см. это. Dennis Williamson 29.06.2012

bashsyntaxconditional

Ответы

Ответ 1 · рейтинг 3 · higuaro

Как указано здесь:

В отличие от [, [[ предотвращает разбиение значений переменных на слова. Итак, если VAR="var with spaces", вам не нужно двойные кавычки $VAR в тесте, хотя использование кавычек остается хорошей привычкой. Кроме того, [[ предотвращает расширение имени пути, поэтому литеральные строки с подстановочными знаками не пытаются расширяться до имен файлов. Использование [[, == и != интерпретирует строки справа как шаблоны шаблонов оболочки для сопоставления со значением слева, например: [[ "value" == val* ]].

Ответ 2 · рейтинг 2 · Michael Hoffman

Здесь ничего нет. Однако синтаксис [[...]] вводит некоторые другие вещи, которые вы можете делать с условными выражениями. От help [[:

Returns a status of 0 or 1 depending on the evaluation of the conditional
expression EXPRESSION.  Expressions are composed of the same primaries used
by the `test' builtin, and may be combined using the following operators:

  ( EXPRESSION )    Returns the value of EXPRESSION
  ! EXPRESSION              True if EXPRESSION is false; else false
  EXPR1 && EXPR2    True if both EXPR1 and EXPR2 are true; else false
  EXPR1 || EXPR2    True if either EXPR1 or EXPR2 is true; else false

When the `==' and `!=' operators are used, the string to the right of
the operator is used as a pattern and pattern matching is performed.
When the `=~' operator is used, the string to the right of the operator
is matched as a regular expression.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы