ใน "BASH มาตรฐาน" สัญลักษณ์แทนที่อยู่ในเครื่องหมายคำพูดคู่หรือไม่ ตัวอย่างเช่น:
$ touch abc
$ ls "*abc*"
จะว่าหรือจะไม่ทำงานที่ทุบตี?
ฉันบอกว่า Ubuntu มาพร้อมกับตัวแปรทุบตีที่ไม่สอดคล้องกับ POSIX หรือ BASH มันเป็นเรื่องจริงเหรอ?
ใน "BASH มาตรฐาน" สัญลักษณ์แทนที่อยู่ในเครื่องหมายคำพูดคู่หรือไม่ ตัวอย่างเช่น:
$ touch abc
$ ls "*abc*"
จะว่าหรือจะไม่ทำงานที่ทุบตี?
ฉันบอกว่า Ubuntu มาพร้อมกับตัวแปรทุบตีที่ไม่สอดคล้องกับ POSIX หรือ BASH มันเป็นเรื่องจริงเหรอ?
คำตอบ:
คำตอบสั้น ๆ : ไม่
คำตอบยาวจากการทุบตีมนุษย์:
การใส่อักขระในเครื่องหมายคำพูดคู่จะเก็บรักษาค่าตัวอักษรของอักขระทั้งหมดภายในเครื่องหมายคำพูดยกเว้น $, `, \
ดังนั้น:
~$ touch sas
~$ ls *a*
sas
~$ ls "*a*"
ls: cannot access *a*: No such file or directory
แน่นอนเมื่อพูดถึงเครื่องหมายคำพูดคู่และเครื่องหมายดอกจันมีข้อยกเว้นอื่น: การขยายพารามิเตอร์ (เช่น: "$ *") ... แต่นั่นเป็นอีกประวัติศาสตร์
สำหรับคำถามที่สองคุณถามเกี่ยวกับเส้นประหรือไม่ dash เป็นเปลือกที่เบาสำหรับสคริปต์ ในเดเบียนและในอูบุนตูต่อส่วนขยาย (ตามเดเบียน) จะใช้นามแฝงกับ sh; มันเป็นข้อได้เปรียบที่สำคัญของ bash คือความเร็วดังนั้นมันถูกใช้เป็นค่าเริ่มต้นสำหรับสคริปต์ระบบ อย่างไรก็ตาม bash นั้นยังคงมีอยู่เป็นเชลล์แบบโต้ตอบสำหรับผู้ใช้ตามค่าเริ่มต้น
~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2011-04-21 11:54 /bin/sh -> dash
dash
ถูกนามแฝง แต่อย่างไรก็ตามมีบางคนที่ฉันกำลังพูดถึงบอกว่าสิ่งนี้ทำงานได้ในระบบ Red Hat ของเขา [* globs เมื่อยกมาสองเท่า - เขากล่าวว่าวิธีเดียวที่จะแน่ใจได้ว่าพวกเขาไม่ได้กลมคือการใช้เครื่องหมายคำพูดเดี่ยว] มีความคิดอะไรไหม