bash / sh if синтаксис оператора - PullRequest
7 голосов
/ 07 августа 2010

В различных руководствах и сценариях, с которыми я сталкиваюсь, люди обычно используют разный синтаксис операторов if.В чем разница и каковы лучшие практики?Я верю, что все следующие утверждения и многие другие варианты вернут истину:

bar="foo"
if [ "foo" = "foo" ]
if [[ "foo" == $bar ]]
if [ "foo" = "$bar" ]
if [[ "foo" = "$bar" ]]
if [[ "foo" -eq $bar ]]

Ответы [ 3 ]

5 голосов
/ 07 августа 2010

Как я понял

= ожидает строки

-eq ожидает целых чисел

«$ bar» - для буквальных совпадений, т. Е. Z * может расширяться, но «z *» будет буквально соответствовать символу подстановки.

Разница между [] и [[]] состоит в том, что в последнем слове разделение и расширение имени пути не выполняются, а в первом.

Plus [[]] позволяет использовать дополнительные операторы:

&& (AND), || (ИЛИ ЖЕ), > (String1 лексически больше, чем String2), <(String1 лексически меньше, чем String2) </p>

Оператор сравнения == ведет себя иначе в тесте с двойными скобками, чем в одиночных скобках.

[[$ a == z *]] # Истина, если $ a начинается с "z" (сопоставление с образцом).

[[$ a == "z *"]] # Истина, если $ a равно z * (буквальное соответствие).

[$ a == z *] # Происходит глобализация файла и разбиение по словам.

["$ a" == "z *"] # Истинно, если $ a равно z * (буквальное соответствие).

Проверьте http://tldp.org/LDP/abs/html/comparison-ops.html для получения дополнительной информации

3 голосов
/ 07 августа 2010

[ - встроенная функция bash, [[ - ключевое слово bash. Рекомендуется всегда использовать [[, если скрипт не должен быть совместим с другими оболочками (например, если он начинается с #!/bin/bash), и использовать [ только для совместимости с оболочкой Bourne. Смотри http://mywiki.wooledge.org/BashFAQ/031.

2 голосов
/ 07 августа 2010

Я рекомендую case / esac.

case "$foo" in
  "bar" ) echo "bar";;
  *) echo "not equal";;
esac

Не беспокойтесь о другом синтаксисе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...