: polecenie dwukropka dla bash


28

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)


Zobacz doskonałą odpowiedź stackoverflow.com/questions/10390406/…
Cedric,

Odpowiedzi:


45

:jest wbudowaną powłoką, która jest w zasadzie odpowiednikiem truepolecenia. Jest często używany jako brak op, np. Po ifwyciągu. Możesz przeczytać więcej na ten temat w tym pytaniu z przepełnienia stosu .

W ${varname=value}zasadzie oznacza ustawić wartość $varnamena valuerazie $varnamenie 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:

${varname:=value}

ustawia zmienną na wartość, jeśli zmienna jest ustawiona lub pusta.

${varname=value}

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.