ความคิดเห็นในคำสั่ง bash แบบหลายบรรทัด


32

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

echo 'foo'     \
| sed 's/d/a/' \
| sed 's/e/b/' \
| sed 's/f/c/' \
> myfile

(sed เป็นเพียงตัวอย่างจริง ๆ แล้วมันเป็นส่วนผสมของ greps และ trs และ awks)

ฉันเกลียดที่จะต้องทำซ้ำบรรทัดหรือให้แต่ละข้อคิดเห็นอยู่ห่างจากบรรทัดที่ใช้กับ
แต่ในเวลาเดียวกัน BASH ดูเหมือนจะไม่อนุญาตให้แสดงความคิดเห็น "ในบรรทัด"

มีวิธีที่สวยงามในการแก้ปัญหานี้หรือไม่?

คำตอบ:


51

วางท่อที่ส่วนท้ายของบรรทัดพร้อมกับความคิดเห็นหลังจากนั้น:

$ echo 'foo' |
sed 's/f/a/' | # change first f to a
sed 's/o/b/' | # change first o to b
sed 's/o/c/'   # change second o to c
abc

สมเหตุสมผลเนื่องจากคาดว่าจะมีอะไรบางอย่างติดตามท่อ
MrCholo

15

หากคุณเกิดขึ้นกับคำถามนี้ในขณะที่ต้องการแสดงความคิดเห็นคำสั่งที่ไม่ใช่ -pipeline multiline:

$ echo 'foo' |
sed -e 's/f/a/' `: # change first f to a` \
    -e 's/o/b/' `: # change first o to b` \
    -e 's/o/c/' `: # change second o to c`

ยกเว้นว่าคุณกำลังทำสิ่งที่ผิดปกติอย่างแท้จริงโดยอัตโนมัติแสดงความคิดเห็นฉันไม่เห็นเหตุผลที่จะชอบสิ่งนี้มากกว่าคำตอบของ Mikel สำหรับท่อ แต่ถ้าคุณต้องการ:

$ echo 'foo' |
sed 's/f/a/' | `: # change first f to a` \
sed 's/o/b/' | `: # change first o to b` \
sed 's/o/c/'   `: # change second o to c`

หรือ:

$ echo 'foo' |
sed 's/f/a/' `: # change first f to a` |
sed 's/o/b/' `: # change first o to b` |
sed 's/o/c/' `: # change second o to c`

ที่มา: http://unix.derkeiler.com/Newsgroups/comp.unix.solaris/2005-07/0991.html


10

ฉันชอบวิธีนี้

echo 'foo' | {
  # change first f to a
  # you can add more lines of comment on the command options
  sed 's/f/a/'
} | {
  # change first o to b
  sed 's/o/b/'
} | {
  # change second o to c
  sed 's/o/c/' 
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.