: команда двокрапки для bash


28

Виступаючи як новачок-баш, я модернізував свій .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

(поза контекстом включають двокрапку ключових слів, щоб допомогти іншим, як я, які намагалися шукати цей термін)


Дивіться чудову відповідь там stackoverflow.com/questions/10390406/…
Седрік

Відповіді:


45

:це вбудована оболонка, яка в основному еквівалентна trueкоманді. Він часто використовується як неоперативний, наприклад, після ifзаяви. Більше про це можна прочитати в цьому питанні із переповнення стека .

В ${varname=value}основному це означає , встановити значення $varnameдля valueякщо $varnameще не встановлено, а потім повертає значення $ змін. Хоча якщо ви спробуєте запустити це в командному рядку, він спробує запустити повернене значення. Якщо поставити :фронт як безопераційний заважає, Bash намагається запустити значення.

Зауважте, є дві дещо різні форми:

${varname:=value}

встановлює значення varname значення, якщо varname не встановлено чи недійсне.

${varname=value}

лише встановлює значення varname, якщо varname наразі не встановлено (тобто воно не змінить varname з "" у значення)

(Дякую чепнеру за пояснення цього в коментарі).

Хтось ще посилається на цей метод

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.