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?

Nicolas Raoul
sumber

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
Mikel
sumber
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

ZakW
sumber
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/' 
}
rox
sumber