Установка переменных по умолчанию с расширением параметра vs if/else test -z
Поэтому традиционно, когда я пишу скрипты bash с флагами аргументов, я реализую значения по умолчанию с помощью базового оператора test, например
if [ -z $foo ]
then
foo=$bar
fi
Сегодня я столкнулся с более сложными расширениями параметров, которые, кажется, делают то же самое
${foo:=$bar}
Как эти два метода сравниваются? Каковы их преимущества / недостатки?
редактировать: исправлены некоторые опечатки, указанные в комментариях
1 ответ
Типичная идиома
: ${foo:=$bar}
в качестве замены
if [ -z "$foo" ]
then
foo=$bar
fi
(обратите внимание на кавычки и пробелы!)
В первом случае расширение параметра обрабатывает присваивание для команды бездействия в противном случае. Это более кратко, но в остальном нет особых оснований для выбора одного над другим. Обратите внимание, что оба поддерживаются POSIX.