สัญลักษณ์แทนภายในคำพูด


32

นี่จะเป็นสิ่งที่ง่าย แต่ในความทรงจำของฉันเมื่อเชลล์สคริปต์การใช้เครื่องหมายคำพูดคู่จะช่วยให้การขยายแบบกลมและตัวแปร

แต่ในรหัสต่อไปนี้:

#!/bin/sh

echo *.sh
echo "*.sh"
echo '*.sh'

echo $LANG
echo "$LANG"
echo '$LANG'

ฉันได้รับผลลัพธ์นี้:

bob.sh redeployJboss.sh
*.sh
*.sh
en_US.utf8
en_US.utf8
$LANG

การโควตเดี่ยวจะป้องกันไม่ให้ glob และการขยายตัวแปรผัน แต่การโควตสองครั้งจะช่วยให้การขยายตัวแปรเท่านั้นและไม่มีการวนซ้ำ?

ฉันสามารถโค้งในรูปแบบการอ้างอิงใด ๆ ?

คำตอบ:


26

คุณถูกต้อง: globbing ไม่ทำงานทั้งคำพูดเดียวหรือสองครั้ง อย่างไรก็ตามคุณสามารถสอดแทรก globbing ด้วยสตริงที่มีเครื่องหมายคำพูดคู่:

$ echo "สวัสดีโลก" * .sh "ลาก่อนโลก"
สวัสดีโลก [รายการไฟล์] ลาก่อนโลก

6
หรือแม้กระทั่งecho "$hello and $goodbye".*(ผสมการขยายตัวของตัวแปรช่องว่างและรูปกลมใน "คำ" เดียวกัน
vonbrand

1
Globbing ดูเหมือนจะไม่ทำงานในกรณีนี้, echo /path/to/file/*${variable}. ฉันจะดูได้อย่างไรในขณะที่ต่อท้ายอีเมลสอดแทรก?
CMCDragonkai

2
@CMCDragonkai echo "$FOLDER_PATH"/*.extensionทำงานได้ดีสำหรับผมที่ตรงกันข้ามกับคำตอบที่ได้รับการยอมรับผมต้องลบช่องว่างระหว่างและ" *หวังว่ามันจะช่วย
LostBalloon

@CMCDragonkai, @LostBalloon ฉันใช้รูปแบบต่อไปนี้เมื่อฉันต้องการใช้ globs กับตัวแปรที่อาจมีช่องว่าง:(cd "$FOLDER_PATH" && echo *.extension)
Steven Darnell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.