2011-09-16 8 views
55

Rozumiem operatora dwukropka w bashu, który działa jak a null i wiem, że jest on używany w parameter expansion, a także jest używany w inny sposób, ale czy ktoś może to wyjaśnić :

: ${SOMETHING='value'} 

z doświadczeń wiem, że ten ustawia zmienną środowiskową $SOMETHING do 'value' ale dlaczego?

"Tylko dlatego, że tak" jest poprawną odpowiedzią, ale następnie proszę o wskazanie mi dokumentacji (której nie mogę znaleźć) lub przydatna jest nazwa tego zastosowania. Mam nadzieję, że jest to o wiele bardziej pouczające wyjaśnienie.

+1

Zauważ, że ':' wbudowaną istnieje w Bourne Shell i ksh, jak bash. – ghoti

Odpowiedz

60

Wyrażenie ustawia COŚ na value, jeśli nie jest jeszcze ustawione. Jest to przydatny operator w wielu sytuacjach. Jednakże, również zwraca przypisaną wartość, więc jeśli po prostu wykonany

${SOMETHING='value'} 

wówczas powłoka będzie próbował wywołać polecenie value. To może, ale nie musi, zrobić coś niepożądanego; przynajmniej wyświetliłby komunikat "value: command not found".

Aby tego uniknąć, można użyć narzędzia no-op :, które ocenia jego argumenty, a następnie je odrzuca, zamiast go wykonywać.

+9

Komenda wbudowana ':' jest udokumentowana [tutaj] (http://www.gnu.org/software/bash/manual/bashref.html#Bourne-Shell-Builtins). Jest to również [standard POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#colon). –

+3

Wyjaśniono również [tutaj] (http://www.tldp.org/LDP/abs/html/special-chars.html#COLON0REF). –

5

Wyjaśnione tutaj: http://tldp.org/LDP/abs/html/parameter-substitution.html

Jeśli parametr nie jest ustawiony, ustaw ją do wartości domyślnych.

Obie formy są prawie równoważne. The: robi różnicę tylko wtedy, gdy zadeklarowano parametr $ i ma wartość null, [1] jak powyżej.

echo ${var=abc} # abc 
echo ${var=xyz} # abc 
# $var had already been set to abc, so it did not change. 
+2

Proponuję http://wiki.bash-hackers.org/syntax/pe lub http://mywiki.wooledge.org/BashFAQ/073 (i jego linki) jako lepsze odniesienia niż ABS (który jest chronicznie niedożywiony) i ma tendencję do prezentowania złych praktyk w swoich przykładach). –

Powiązane problemy