คำถามนี้เป็นผลสืบเนื่องของแปลกไปของฉันคำถามก่อนหน้านี้ ผู้ใช้ในเว็บไซต์นี้ช่วยฉันในการกำหนดวิธีการเขียน bash for
loop ที่วนซ้ำค่าสตริง ตัวอย่างเช่นสมมติว่าการควบคุมวงตัวแปรfname
iterates "a.txt" "b.txt" "c.txt"
มากกว่าสตริง ฉันต้องการที่จะecho
"ใช่!" เมื่อfname
มีค่า"a.txt"
หรือ"c.txt"
และecho
"ไม่!" มิฉะนั้น. ฉันได้ลอง bash shell script แล้ว:
#!/bin/bash
for fname in "a.txt" "b.txt" "c.txt"
do
echo $fname
if [ "$fname" = "a.txt" ] | [ "$fname" = "c.txt" ]; then
echo "yes!"
else
echo "no!"
fi
done
ฉันได้รับผลลัพธ์:
a.txt
ไม่!
b.txt
ไม่!
c.txt
ใช่!
ทำไมif
คำสั่งเห็นได้ชัดว่าผลผลิตจริงเมื่อfname
มีค่า"a.txt"
? ฉันใช้|
ไม่ถูกต้องหรือไม่
3
ในทุบตี 'หรือ' โอเปอเรเตอร์คือ '||' (สไตล์ C)
—
Marius Cotofana
คุณยังสามารถใช้
—
Thor
-o
ภายในเดียวกัน[ ]
ได้
@Thor ฉันชอบ
—
jw013
||
และแยก[ ]
กว่า-o
สำหรับการพกพาเพียงเพราะ[
ไม่รับประกันว่าจะสนับสนุนมากกว่า 4 ข้อโต้แย้ง แน่นอนถ้าภาษาเป้าหมายคือbash
ไม่มีใครควรจะใช้[
นะเพราะbash
's [[
จะดีกว่าในหลาย ๆ
@ jw013 ขอบคุณ นี่หมายความว่าฉันควรจะใช้
—
แอนดรู
if [[ "$fname" = "a.txt" ]] || [[ "$fname" = "c.txt" ]]
มากกว่าif [ "$fname" = "a.txt" ] || [ "$fname" = "c.txt" ]
หรือไม่
@ แอนดรูว์นั้นถูกต้องถ้าคุณเป็นคนประกาศให้เป็น
—
jw013
bash
เช่นเดียวกับที่คุณทำอยู่แล้ว ข้อดีอย่างหนึ่ง[[
ก็คือมันไม่ได้แยกคำ (กรณีพิเศษ) จึง[[ $unquoted_var = string ]]
ปลอดภัย