ใครสามารถอธิบายความหมายของคำสั่งนี้ได้บ้าง
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
ใครสามารถอธิบายความหมายของคำสั่งนี้ได้บ้าง
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
คำตอบ:
${GZIP_BINDIR-'/bin'}
เป็นbash
รูปแบบการขยายพารามิเตอร์ จากman bash
:
${parameter:-word}
Use Default Values. If parameter is unset or null,
the expansion of word is substituted. Otherwise, the value of parameter
is substituted.
ทันทีก่อนหน้าส่วนของหน้านี้จะมี (ขอบคุณ @jwodder สำหรับการแจ้งเตือน):
Omitting the colon results in a test only for a parameter that is unset.
ในฐานะที่เป็น manpage GZIP_BINDIR
กล่าวว่ามันจะตั้งค่าเริ่มต้นของตัวแปร หากGZIP_BINDIR
มีค่าตั้งก่อนหน้านี้ (นอกเหนือ null ในขณะที่คุณไม่ได้ใช้:
) แล้วว่าค่าจะใช้มิฉะนั้นจะถูกใช้เป็นค่าของตัวแปร/bin
GZIP_BINDIR
ในทางกลับกันหากคุณต้องการทดสอบค่าว่างให้ใช้รูปแบบนี้ (รวม:
):
${GZIP_BINDIR:-'/bin'}
หลังจากนั้น$PATH
จะขยายไปยังค่าที่มันเคยเป็นมาก่อน ดังนั้นหากPATH
ก่อนหน้านี้มี:
/usr/sbin:/usr/bin
ตอนนี้คุณPATH
จะ ( GZIP_BINDIR
ไม่ได้ตั้งค่าการพิจารณา):
/bin:/usr/sbin:/usr/bin
export PATH
จะทำให้สิ่งนี้PATH
พร้อมใช้งานสำหรับกระบวนการลูกทั้งหมด
:-
กล่าวว่า: "เมื่อไม่ได้ดำเนินการ substring การขยายตัวโดยใช้รูปแบบการบันทึกไว้ด้านล่าง (เช่น :-) ทดสอบทุบตีสำหรับพารามิเตอร์ที่เป็น unset หรือโมฆะ. ไม่ใส่ลำไส้ใหญ่ ผลลัพธ์ในการทดสอบเฉพาะสำหรับพารามิเตอร์ที่ไม่ได้ตั้งค่า "
PATH
และexport
คำสั่งเดียวเข้าด้วยกันดังนี้:export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
ไม่มีเครื่องหมายโคลอนอยู่ข้างหน้าเครื่องหมายขีดคั่นภายในการขยายพารามิเตอร์${GZIP_BINDIR-'/bin'}
หรือไม่
โครงสร้างแบบนี้มักจะเขียนด้วยเครื่องหมายโคลอน${GZIP_BINDIR:-'/bin'}
ซึ่งหมายความว่า "ถ้า $ GZIP_BINDIR เป็นค่า NULL หรือ unset ให้ตั้งค่าเป็น '/ bin'"
อย่างไรก็ตามไวยากรณ์ที่คุณให้มานั้นถูกต้อง แต่หายาก ${GZIP_BINDIR-'/bin'}
(ไม่มีเครื่องหมายโคลอน) หมายความว่า "ถ้า $ GZIP_BINDIR ไม่ได้ตั้งค่าให้ตั้งเป็น '/ bin'" หากมีการตั้งค่า (ได้รับการประกาศ) แต่ไม่มีอะไรที่ได้รับมอบหมาย (เช่นมันเป็นโมฆะ) ไม่มีอะไรจะถูกแทรก
อาจมีข้อผิดพลาดที่นี่แม้ว่าในขณะที่โคลอนตามการสร้างตัวแปร (... } :
$ PATH ... ) จะยังคงถูกแทรกหากตั้งค่า $ GZIP_BINDIR แต่เป็น NULL เนื่องจากสิ่งนี้จะเพิ่มโคลอนที่จุดเริ่มต้นของ $ PATH มันจะทำให้ไดเรกทอรีปัจจุบันถูกค้นหาก่อน
โดยส่วนใหญ่แล้วถือว่าเป็นปัญหาด้านความปลอดภัยเนื่องจากจะทำให้โปรแกรมที่เป็นอันตรายที่มีชื่อเดียวกันกับคำสั่งมาตรฐานทำงานได้ง่ายขึ้นเพียงแค่ใส่ไว้ในไดเรกทอรีปัจจุบัน
ในการปล่อยให้ $ PATH ไม่เปลี่ยนแปลงหากมีการตั้งค่า $ GZIP_BINDIR แต่เป็น NULL (ว่าง) ไวยากรณ์ที่ถูกต้องจะเป็น ${GZIP_BINDIR-'/bin:'}$PATH; export PATH
ในการปล่อยให้ $ PATH ไม่เปลี่ยนแปลงถ้า $ GZIP_BINDIR ไม่ได้ตั้งค่าไว้หรือถูกตั้งค่าไว้ แต่ NULL ไวยากรณ์ที่ถูกต้องจะเป็น ${GZIP_BINDIR:-'/bin:'}$PATH; export PATH
คำสั่งนี้อัพเดตตัวแปร PATH
PATH
เป็นตัวแปรสภาพแวดล้อมระบุชุดของไดเรกทอรีที่โปรแกรมปฏิบัติการตั้งอยู่
PATH="${GZIP_BINDIR-'/bin'}:$PATH";
นี่เป็นการเพิ่มค่าของตัวแปรอื่นGZIP_BINDIR
ถ้าออกจาก PATH ก่อนหน้านี้ให้ใช้ / bin แทนและเพิ่มไปที่ PATH
export PATH
การส่งออกจะใช้ในการตั้งค่าเส้นทางที่มีอยู่สำหรับกระบวนการเด็กและ subshells ทั้งหมดอ่านนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ
คุณต้องทราบว่านี่ไม่คงที่และคุณจะหลวมเมื่อคุณออกจากเปลือกของคุณ
ในการทำให้การแก้ไข PATH นี้เป็นแบบถาวรคุณต้องต่อท้ายบรรทัดเหล่านี้กับคุณ .bashrc
gedit .bashrc
และเพิ่มบรรทัด
export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
จากนั้นเรียกใช้คำสั่ง
source .bashrc
:
ใน${GZIP_BINDIR-'/bin'}
" ไม่จำเป็น${parameter-word}
ถูกต้องเช่นกัน แต่ดูเหมือนจะไม่อยู่ในหน้าคน