bash
กำหนดหลายmetacharacters จากman bash
:
metacharacter
ตัวละครที่แยกคำออกมา หนึ่งในสิ่งต่อไปนี้:
| &; () <> แท็บช่องว่าง
เนื่องจากอักขระเมตาเซอร์แยกคำจึงไม่สำคัญว่าจะถูกล้อมรอบด้วยช่องว่างหรือไม่ สัญลักษณ์ไปป์|
เป็นตัวอักษรและด้วยเหตุนี้ตามที่คุณสังเกตเห็นมันไม่จำเป็นต้องมีช่องว่างรอบ ๆ
โปรดทราบว่า[
, ]
, {
, }
และ=
มีไม่ metacharacters ตรงกันข้ามความหมายของพวกเขาขึ้นอยู่กับว่าพวกเขาถูกล้อมรอบด้วยช่องว่างหรือไม่
ตัวอย่างของช่องว่างเมื่อใดและไม่จำเป็น
ดังที่คุณสังเกตเห็นว่าไม่สำคัญว่าจะ|
ถูกล้อมรอบด้วยช่องว่างหรือไม่ ให้เราพิจารณาตัวอย่างบางอย่างที่ทำให้ผู้ใช้ bash สับสนโดยทั่วไป พิจารณา:
$ (date)
Sun Mar 1 12:47:07 PST 2015
parens ด้านบนบังคับให้date
คำสั่งรันเป็น subshell เพราะ(
และ)
เป็นเมตาแท็กจึงไม่ต้องมีช่องว่าง ตรงกันข้าม:
$ {date}
bash: {date}: command not found
ตั้งแต่{
และ}
มีไม่ metacharacters ที่เปลือกถือว่า{date}
เป็นหนึ่งคำ แทนที่จะมองหาคำสั่งจะมองหาคำสั่งที่มีชื่อว่าdate
{date}
เนื่องจากไม่พบหนึ่งข้อผิดพลาดผลลัพธ์
อีกปัญหาที่พบบ่อยคือtest
คำสั่ง การทำงานต่อไปนี้สำเร็จ:
$ [ abc ] && echo Yes
Yes
ลบช่องว่างและเกิดข้อผิดพลาด:
$ [abc] && echo Yes
bash: [abc]: command not found
เพราะ[
และ]
มีไม่ metacharacters ที่เปลือกถือว่า[.bashrc]
เป็นคำเดียวและผลเช่นเดียวกับในdate
ตัวอย่างเช่นเป็นข้อผิดพลาด
งบการมอบหมายยังมีความอ่อนไหวต่อช่องว่าง การมอบหมายต่อไปนี้สำเร็จ:
$ v=date
$ echo $v
date
เพิ่มช่องว่างและการมอบหมายล้มเหลว:
$ v= date
Sun Mar 1 12:55:05 PST 2015
ในข้างต้นเชลล์ตั้งค่าv
ให้ว่างเปล่าชั่วคราวแล้วดำเนินการdate
คำสั่ง
เพิ่มช่องว่างก่อน=
ยังทำให้เกิดความล้มเหลว แต่ด้วยเหตุผลอื่น:
$ v =date
bash: v: command not found
นี่คือความพยายามที่จะเปลือกรันคำสั่งที่มีการโต้แย้งv
ข้อผิดพลาดเป็นเพราะพบว่าคำสั่งไม่มีชื่อ=date
v