: bash için colon komutu


28

Bir bash acemi gibi konuşurken ben .bashrc'yi copy / paste + github aracılığıyla yükseltiyorum ve :hem beni hem de google'ı güdük eden komutla karşılaştım . örn : ${USER_BASH_COMPLETION_DIR:=~/.bash_completion.d}.

Asıl olarak .bashrc dosyamda bu ifade olmadan ve bu şeyleri terminalime yazarak ( -> ilgili çıktıyı belirtir):

: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
echo $USER_BASH_COMPLETION_DIR
-> /Users/sh/.bash_completion.d

Ve:

: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
export USER_BASH_COMPLETION_DIR=asdf
echo $USER_BASH_COMPLETION_DIR
-> asdf

Fakat:

: ${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

Anlamadım!

1) iki nokta üst üste komutu bir değişkeni nasıl belirler, ancak bir değişkenin üzerine yazamaz exportmı?

2) :Bazı .bashrc dosyalarında kullanmanın ardındaki mantık nedir ?

Mac 10.6.8’in Kullanımı

(bağlam dışı, sadece benim gibi o terimi aramaya çalışan başkalarına yardımcı olmak için anahtar kelime kolonu anahtar kelimesini içerir)


Oradaki mükemmel cevaba bakınız. Stackoverflow.com/questions/10390406/…
Cedric

Yanıtlar:


45

:temelde truekomuta eşdeğer olan bir kabuk yerleşimidir . Genellikle no-op olarak kullanılır, örneğin bir ififadeden sonra . Bu soru ile ilgili daha fazla bilgiyi yığın taşmasından okuyabilirsiniz .

${varname=value}Temelde araçlar değerini ayarlamak $varnameiçinvalue ise $varnamezaten ayarlı değil, sonra $ yönerge değerini döndürür. Bunu komut satırında çalıştırmayı deneseniz de, döndürülen değeri çalıştırmayı dener. İçeriyi :no-op olarak koymak, bash'ın değeri çalıştırmaya çalışmasını engeller.

İki biraz farklı form olduğuna dikkat edin:

${varname:=value}

varname ayarlanmamış veya boş ise, varname değerini ayarlar.

${varname=value}

sadece varname şu anda ayarlanmamışsa varname değerini ayarlar (yani, varname "" 'den değere değiştirilmez)

(Bir yorumda bunu açıklığa kavuşturmak için tezahürat yaptığınız için teşekkür ederiz).

Bu yöntemi referans veren başka biri

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.