Mówiąc jak nowicjusz, uaktualniłem swój .bashrc przez copy / paste + github i natrafiłem na :
polecenie, które zaskakuje zarówno mnie, jak i google. np : ${USER_BASH_COMPLETION_DIR:=~/.bash_completion.d}
.
Bez tej instrukcji oryginalnie w moim .bashrc i wpisanie tych rzeczy w moim terminalu ( -> oznacza odpowiednie dane wyjściowe):
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
echo $USER_BASH_COMPLETION_DIR
-> /Users/sh/.bash_completion.d
I:
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
export USER_BASH_COMPLETION_DIR=asdf
echo $USER_BASH_COMPLETION_DIR
-> asdf
Ale:
: ${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
Nie rozumiem
1) W jaki sposób polecenie dwukropek ustawia zmienną, ale nie może zastąpić zestawu przez export
?
2) Jaka jest logika używania :
niektórych plików .bashrc?
Na komputerze Mac 10.6.8
(poza kontekstem obejmuje dwukropek słów kluczowych, aby pomóc innym osobom, takim jak ja, które próbowały wyszukać ten termin)
Odpowiedzi:
:
jest wbudowaną powłoką, która jest w zasadzie odpowiednikiemtrue
polecenia. Jest często używany jako brak op, np. Poif
wyciągu. Możesz przeczytać więcej na ten temat w tym pytaniu z przepełnienia stosu .W
${varname=value}
zasadzie oznacza ustawić wartość$varname
navalue
razie$varname
nie jest już ustawiony, a następnie zwraca wartość $ nazwa_zmiennej. Chociaż jeśli spróbujesz uruchomić to z wiersza poleceń, spróbuje uruchomić zwróconą wartość. Umieszczenie z:
przodu jako no-op zapobiega próbie uruchomienia wartości przez bash.Uwaga: istnieją dwie nieznacznie różne formy:
ustawia zmienną na wartość, jeśli zmienna jest ustawiona lub pusta.
ustawia wartość zmiennej tylko wtedy, gdy zmienna jest obecnie rozbrojona (tzn. nie zmieni wartości zmiennej z „” na wartość)
(Dziękuję chepnerowi za wyjaśnienie tego w komentarzu).
Ktoś jeszcze odwołuje się do tej metody
źródło