Установка переменных по умолчанию с расширением параметра 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.

Другие вопросы по тегам