Berbicara sebagai pemula bash saya telah memutakhirkan .bashrc saya melalui copy / paste + github dan saya telah menemukan :
perintah yang membingungkan saya dan google. mis : ${USER_BASH_COMPLETION_DIR:=~/.bash_completion.d}
.
Tanpa pernyataan ini awalnya di .bashrc saya, dan mengetikkan hal ini ke terminal saya ( -> menunjukkan output yang relevan):
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
echo $USER_BASH_COMPLETION_DIR
-> /Users/sh/.bash_completion.d
Dan:
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
export USER_BASH_COMPLETION_DIR=asdf
echo $USER_BASH_COMPLETION_DIR
-> asdf
Tapi:
: ${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
Saya tidak mengerti!
1) Bagaimana perintah titik dua mengatur variabel tetapi tidak dapat menimpa satu set oleh export
?
2) Apa logika di balik penggunaan :
dalam beberapa .bashrc?
Menggunakan Mac 10.6.8
(di luar konteks termasuk kata kunci usus hanya untuk membantu orang lain seperti saya yang mencoba mencari istilah itu)
Jawaban:
:
adalah shell builtin yang pada dasarnya setara dengantrue
perintah. Ini sering digunakan sebagai no-op misalnya setelahif
pernyataan. Anda dapat membaca lebih lanjut tentang hal ini dalam pertanyaan ini dari stack overflow .Pada
${varname=value}
dasarnya berarti mengatur nilai$varname
kevalue
jika$varname
belum ditetapkan, dan kemudian mengembalikan nilai $ varname. Meskipun jika Anda mencoba menjalankannya di baris perintah, ia akan mencoba menjalankan nilai yang dikembalikan. Menempatkan:
di depan sebagai larangan mencegah bash mencoba menjalankan nilai.Perhatikan ada dua bentuk yang sedikit berbeda:
set varname ke nilai jika varname tidak disetel atau null.
hanya menetapkan nilai varname jika varname saat ini tidak disetel (mis., itu tidak akan mengubah varname dari "" ke nilai)
(Terima kasih kepada chepner untuk mengklarifikasi hal itu dalam komentar).
Orang lain yang mereferensikan metode ini
sumber