Говоря как новичок в bash, я обновлял свой .bashrc через copy / paste + github, и я столкнулся с :
командой, которая ставит меня в тупик и google. например : ${USER_BASH_COMPLETION_DIR:=~/.bash_completion.d}
.
Без этого утверждения изначально в моем .bashrc и ввода этого материала в мой терминал ( -> указывает на соответствующий вывод):
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
echo $USER_BASH_COMPLETION_DIR
-> /Users/sh/.bash_completion.d
А также:
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
export USER_BASH_COMPLETION_DIR=asdf
echo $USER_BASH_COMPLETION_DIR
-> asdf
Но:
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
export USER_BASH_COMPLETION_DIR=asdf
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
echo $USER_BASH_COMPLETION_DIR
-> asdf
Я не понимаю!
1) Как команда двоеточия устанавливает переменную, но не может перезаписать переменную export
?
2) Какова логика использования :
в некоторых .bashrc?
Использование Mac 10.6.8
(вне контекста включает ключевое слово двоеточие, чтобы помочь другим, таким как я, которые пытались найти этот термин)
Ответы:
:
это встроенная оболочка, которая в основном эквивалентнаtrue
команде Он часто используется в качестве запрета, например, послеif
заявления. Вы можете прочитать больше об этом в этом вопросе из переполнения стека .В
${varname=value}
основном это означает , установить значение$varname
дляvalue
если$varname
еще не установлен, а затем возвращает значение $ перем. Хотя, если вы попытаетесь запустить это в командной строке, он попытается запустить возвращаемое значение. Помещение:
переднего как неоперативное предотвращает попытку запуска значения bash.Обратите внимание, что есть две слегка разные формы:
устанавливает значение переменной varname, если переменная либо не установлена, либо равна нулю.
устанавливает значение переменной varname только в том случае, если переменная в данный момент не установлена (т. е. она не изменит varname с "" на значение)
(Спасибо Чепнеру за разъяснение этого в комментарии).
Кто-то еще ссылается на этот метод
источник