2016-03-28 2 views
0

Выполняют ли эти два фрагмента кода, один с использованием знака с двоеточием, а другой с помощью программы с двойными скобками, демонстрируют такое же поведение?Существуют ли различия в поведении между: = и [[?

: "${foo:=bar}" 

и

if ! [[ $foo ]]; then 
    foo=bar 
fi 

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

ответ

2

Насколько я знаю, они функционально эквивалентны. Что касается лучшего, я бы сказал, что это вопрос вкуса. Лично я предпочел бы : ${foo:=bar}, поскольку он более краткий, но другие, менее знакомые с синтаксисом, вероятно, подойдут для более очевидного подхода.

Обратите внимание, что ваш первый подход использует стандартные функции оболочки, поэтому должен работать на любой совместимой с POSIX оболочке. Чтобы сделать ваш второй подход более переносимым, я бы пошел с:

if [ -z "$foo" ]; then 
    foo=bar 
fi 
+0

'if! ["$ foo"]; то 'также будет POSIX-совместимым. – chepner

Смежные вопросы