$ {parameter: = word} Назначить значения по умолчанию. Если параметр не установлен или равен нулю, параметру присваивается раскрытие слова. Затем подставляется значение параметра. Позиционные параметры и специальные параметры не могут быть назначены таким образом.
Я думал, что могу использовать эту функцию для записи ${LONG_VARIABLE_NAME:=hello}
вместо более длинного LONG_VARIABLE_NAME=${LONG_VARIABLE_NAME:-hello}
, но теперь bash также пытается выполнить 'hello', и это дает команду, которая не найдена. Есть ли способ избежать этого? Или мне придется придерживаться последнего? Может ли кто-нибудь привести пример, когда назначение по умолчанию действительно полезно?
Ответы:
Используйте двоеточие:
Двоеточие - это пустая команда, которая ничего не делает и игнорирует свои аргументы. Он встроен в bash, поэтому новый процесс не создается.
источник
: ${A:=hello}
это ровно столько, сколькоA=${A:-hello}
. Также кажется, что последнее немного менее эзотерично, а его цель более ясна. Использование:
, которое в основном не работает, кажется глупым по сравнению с тем, как OP делал это раньше.:
подход был бы предпочтительнее как для ввода, так и для чтения. Да, похоже, в этой области Bash можно было бы немного улучшить.: ${VERY_LONG_VARIABLE_NAME:=hello}
VS.:VERY_LONG_VARIABLE_NAME=${VERY_LONG_VARIABLE_NAME:-hello}
. Надеюсь, вы используете в своем коде описательные имена переменных :)VERY_LONG_VARIABLE_NAME=${VERY_LOGN_VARIABLE_NAME:-hello}
. К сожалению.A=$A:-hello
подхода в том, что он самодокументируется при запуске сset -x
. То есть, присвоение будет напечатано, аA=hello
команда null будет печатать только значение (hello
).Пожалуйста , посмотрите на http://www.tldp.org/LDP/abs/html/parameter-substitution.html примеры
Если параметр не установлен, используйте значение по умолчанию. После звонка параметр все еще не установлен.
Обе формы почти эквивалентны. Дополнительное значение
:
имеет значение только тогда, когда параметр был объявлен, но имеет значение null.Если параметр не установлен, установите значение параметра по умолчанию.
Обе формы почти эквивалентны. : Имеет значение только тогда, когда параметр был объявлен и имеет значение null
Если параметр установлен, используйте alt_value, иначе используйте пустую строку. После звонка значение параметра не изменилось.
Обе формы почти эквивалентны. : Имеет значение только тогда, когда параметр был объявлен и имеет значение null
источник
Расширение параметра значения по умолчанию часто полезно в сценариях сборки, подобных приведенному ниже примеру. Если пользователь просто вызывает скрипт как есть, perl не будет встроен. Пользователь должен явно установить
WITH_PERL
значение, отличное от «no», чтобы он был встроен.Сборка без Perl
Сборка с Perl
источник