: คำสั่งโคลอนสำหรับทุบตี


28

การพูดเป็นมือใหม่ฉันได้อัปเกรด. bashrc ของฉันผ่าน copy / paste + github และฉันเจอ:คำสั่งที่ทำให้ฉันและ google แย่ลง : ${USER_BASH_COMPLETION_DIR:=~/.bash_completion.d}เช่น

หากไม่มีข้อความนี้ใน. bashrc ของฉันและพิมพ์สิ่งนี้ลงในเทอร์มินัลของฉัน ( ->หมายถึงเอาต์พุตที่เกี่ยวข้อง):

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

และ:

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

แต่:

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

ฉันไม่เข้าใจ!

1) คำสั่งโคลอนตั้งค่าตัวแปรอย่างไร แต่ไม่สามารถเขียนทับชุดเดียวได้export?

2) ตรรกะเบื้องหลังการใช้งาน:ใน. bashrc บางตัวคืออะไร

ใช้ Mac 10.6.8

(นอกบริบทประกอบด้วยคำหลักโคลอนเพื่อช่วยให้ผู้อื่นเช่นฉันที่พยายามค้นหาคำนั้น)


ดูคำตอบที่ยอดเยี่ยมที่นั่นstackoverflow.com/questions/10390406/…
Cedric

คำตอบ:


45

:เป็น shell builtin ที่เทียบเท่ากับtrueคำสั่ง มันมักจะใช้เป็น no-op เช่นหลังจากifคำสั่ง คุณสามารถอ่านเพิ่มเติมเกี่ยวกับมันในคำถามนี้จากกองล้น

${varname=value}โดยทั่วไปหมายถึงการกำหนดค่าของการ$varnameไปvalueถ้า$varnameไม่ได้ตั้งค่าไว้แล้วกลับค่าของ $ varName แม้ว่าคุณพยายามเรียกใช้ที่บรรทัดคำสั่งมันจะพยายามเรียกใช้ค่าที่ส่งคืน วาง:ด้านหน้าไว้เป็น no-op เพื่อป้องกันไม่ให้ bash พยายามเรียกใช้ค่า

โปรดทราบว่ามีสองรูปแบบที่แตกต่างกันเล็กน้อย:

${varname:=value}

ตั้งค่า varname เป็นค่าถ้า varname เป็น unset หรือ null

${varname=value}

ตั้งค่า varname เฉพาะถ้า varname ไม่ได้ตั้งค่าไว้ในปัจจุบัน (กล่าวคือจะไม่เปลี่ยน varname จาก "" เป็นค่า)

(ขอบคุณที่ chepner สำหรับการชี้แจงว่าในความคิดเห็น)

มีคนอ้างอิงวิธีนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.