ใน bash ฉันรู้ว่ามันเป็นไปได้ที่จะเขียนfor
loop ซึ่งตัวแปรควบคุมการi
วนซ้ำนั้นวนซ้ำตามจำนวนเต็มที่ระบุ ตัวอย่างเช่นฉันสามารถเขียน bash shell script ที่พิมพ์จำนวนเต็มระหว่าง 1 ถึง 10:
#!/bin/bash
for i in {1..10}
do
echo $i
done
เป็นไปได้หรือไม่ที่จะวนซ้ำตัวแปรการควบคุมลูปที่เป็นสตริงแทนถ้าฉันจัดเตรียมรายการสตริง? ตัวอย่างเช่นสมมติว่าฉันมีสตริงfname
ที่แสดงชื่อไฟล์ ฉันต้องการเรียกชุดคำสั่งสำหรับแต่ละชื่อไฟล์ ตัวอย่างเช่นฉันอาจต้องการพิมพ์เนื้อหาของการfname
ใช้คำสั่งเช่นนี้:
#!/bin/bash
for fname in {"a.txt", "b.txt", "c.txt"}
do
echo $fname
done
กล่าวอีกนัยหนึ่งในการทำซ้ำครั้งแรกfname
ควรมีค่าfname="a.txt"
ในขณะที่การทำซ้ำครั้งที่สองfname
ควรมีค่าfname="b.txt"
และอื่น ๆ น่าเสียดายที่ดูเหมือนว่าไวยากรณ์ข้างต้นไม่ถูกต้องนัก ฉันต้องการได้รับผลลัพธ์:
a.txt
b.txt
c.txt
แต่เมื่อฉันลองรหัสข้างต้นฉันได้ผลลัพธ์นี้:
{a.txt,
b.txt,
c.txt}
คุณช่วยฉันในการกำหนดไวยากรณ์ที่ถูกต้องเพื่อที่ฉันจะสามารถเปลี่ยนค่า / เนื้อหาของตัวแปรได้fname
หรือไม่? ขอขอบคุณสำหรับเวลาของคุณ.
{}
และ,
s ทางเลือกคือการลบช่องว่าง ดังนั้นทั้งหรือ"a.txt" "b.txt" "c.txt"
{"a.txt","b.txt","c.txt"}
แต่ฉันชอบ{a..c}.txt
แทน
{}
คุณไม่ต้องการอะไรที่จะวนซ้ำรายการ (เว้นวรรค)