В чем точная разница между:
if [ $? -ne 0 ];
и
if [[ $? -ne 0 ]];
В чем точная разница между:
if [ $? -ne 0 ];
и
if [[ $? -ne 0 ]];
Как указано здесь:
В отличие от
[,[[предотвращает разбиение значений переменных на слова. Итак, еслиVAR="var with spaces", вам не нужно двойные кавычки$VARв тесте, хотя использование кавычек остается хорошей привычкой. Кроме того,[[предотвращает расширение имени пути, поэтому литеральные строки с подстановочными знаками не пытаются расширяться до имен файлов. Использование[[,==и!=интерпретирует строки справа как шаблоны шаблонов оболочки для сопоставления со значением слева, например:[[ "value" == val* ]].
[[ является встроенной по сравнению с [, которая является внешней командой.
- person Samveen; 29.06.2012
[ — это внешняя команда. Но это также встроенный.
- person Dennis Williamson; 29.06.2012
Здесь ничего нет. Однако синтаксис [[...]] вводит некоторые другие вещи, которые вы можете делать с условными выражениями. От 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.
[ $? -ne 0 ] и [[ $? -ne 0 ]] нет.
- person Michael Hoffman; 29.06.2012
[— это (обычно) имя программы. Это должно помочь объяснить некоторые различия. - person   schedule 29.06.2012[является встроенной программой (попробуйтеtype [), но[часто также является внешней программой. - person Michael Hoffman   schedule 29.06.2012