Komentar dalam perintah bash multi-line


32

File skrip BASH perintah tunggal ini sulit dipahami, jadi saya ingin menulis komentar untuk setiap tindakan:

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

(sed hanyalah sebuah contoh, sebenarnya itu adalah campuran greps dan trs dan awks)

Saya akan benci harus menduplikasi baris, atau memiliki setiap komentar jauh dari baris yang berlaku.
Tetapi pada saat yang sama BASH tampaknya tidak mengizinkan komentar "in-line".

Adakah cara elegan untuk mengatasi masalah ini?

Jawaban:


51

Letakkan pipa di ujung baris dengan komentar setelahnya:

$ 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

masuk akal, karena sesuatu diharapkan mengikuti pipa
MrCholo

15

Jika Anda kebetulan pada pertanyaan ini sambil mencari untuk mengomentari sebuah non perintah multiline -pipeline:

$ 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`

Kecuali jika Anda melakukan sesuatu yang sangat menyimpang seperti mengotomatiskan komentar, saya tidak dapat melihat alasan untuk memilih ini daripada jawaban Mikel untuk sebuah pipa, tetapi jika Anda benar-benar ingin:

$ 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`

atau:

$ 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`

Sumber: http://unix.derkeiler.com/Newsgroups/comp.unix.solaris/2005-07/0991.html


10

Yah, saya lebih suka cara ini,

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/' 
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.