glob / แยก
ฉันจะเอารูปกลม / แบ่งก่อน @ คำตอบของสเตฟานที่คุณเชื่อมโยงด้วยกำลังใช้คำเหล่านั้นในแง่ทั่วไป พวกเขาไม่ใช่คำสั่งจริงหรืออะไรอย่างนั้นเพียงแค่ดำเนินการหลอก
split("$test")
จะแบ่งเนื้อหาของ "$ ทดสอบ" ขึ้นเป็น "อาร์เรย์" ขององค์ประกอบ
glob(...)
แล้วจะดูแลเพื่อขยายใด ๆ ขององค์ประกอบเหล่านี้ที่มีเปลือก globbing ตัวอักษรเช่นหรือช่วง*
[1-2]
ตัวอย่าง
สมมติว่าสตริงของเรา$test
มีดังนี้
$ test="afile[1-2] afile[3-5]"
สมมติว่าเรามีไดเรกทอรีพร้อมไฟล์บางไฟล์
$ ls -1
afile1
afile2
afile3
afile4
afile5
ตอนนี้ถ้าเราพยายามที่จะสะท้อนโดยไม่ต้องพูดคุณควรสังเกตว่าสตริงของเราได้แยกช่องว่างแล้วตัวอักษรกลม ๆ ใด ๆ ได้ขยาย
$ echo $test
afile1 afile2 afile3 afile4 afile5
อย่างไรก็ตามถ้าเราต้องอ้างอิงตัวแปรเมื่อเราส่งมันเป็นอาร์กิวเมนต์ให้echo
เราได้รับสตริงตัวอักษรดั้งเดิม
$ echo "$test"
afile[1-2] afile[3-5]
การขยายตัวของตัวแปร
การขยายตัวของคำศัพท์มีไว้เพื่อให้ครอบคลุมการดำเนินงานขั้นพื้นฐานที่เชลล์ดำเนินการโดยเป็นส่วนหนึ่งของการดำเนินงานพื้นฐาน เชลล์มีหน้าที่แยกวิเคราะห์อินพุตจากนั้นเรียกใช้งานอินพุตนี้เมื่อถือว่าถูกต้องทางไวยากรณ์
ในตัวอย่างก่อนหน้าของเรา เมื่อตัวแปร$test
ถูกนำเสนอให้กับecho
unquote เราได้บอกให้เชลล์ดำเนินการต่อไปและแยกข้อโต้แย้งเหล่านั้นออกแล้วทำให้มันกลม
เมื่อมีการอ้างถึงเราได้ทำการปิดการใช้งานคุณลักษณะนั้นโดยใช้ตัวแปรที่เราห่อด้วยเครื่องหมายคำพูดคู่
ตัวอย่าง
นี่คือตัวอย่างเพิ่มเติมของการโค้งงอและการแยก
glob / แยกเกิดขึ้นโดยอัตโนมัติ
$ echo file{1..3}
file1 file2 file3
$ echo file{1..3} dir{a..b}
file1 file2 file3 dira dirb
$ echo dir{z..w} file{A..D}
dirz diry dirx dirw fileA fileB fileC fileD
$ echo dir{z..w} file{A..B} fileC
dirz diry dirx dirw fileA fileB fileC
glob / splitting ถูกปิดใช้งานผ่านการอ้างอิงสองครั้ง
$ echo "dir{z..w} file{A..B} fileC"
dir{z..w} file{A..B} fileC
$ echo "dir{z..w} file{A..B}"
dir{z..w} file{A..B}