Komentarze w wieloliniowym poleceniu bash

32

Ten skrypt skryptowy BASH z jednym poleceniem jest trudny do zrozumienia, dlatego chcę napisać komentarz do każdej akcji:

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

(sed jest tylko przykładem, w rzeczywistości jest to połączenie greps, trs i awks)

Nie chciałbym powielać wierszy ani umieszczać każdego komentarza daleko od wiersza, którego dotyczy.
Ale jednocześnie BASH wydaje się nie dopuszczać komentarzy „w linii”.

Jakiś elegancki sposób na rozwiązanie tego problemu?

Nicolas Raoul
źródło

Odpowiedzi:

51

Umieść rury na końcu wiersza z komentarzami po nim:

$ 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
źródło
ma sens, ponieważ oczekuje się, że coś pójdzie za fajką
MrCholo
15

Jeśli zdarzy ci na to pytanie, patrząc na komentarz do non -pipeline polecenia wielowierszowego:

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

O ile nie robisz czegoś naprawdę przewrotnego, takiego jak automatyzowanie komentowania, nie widzę powodu, aby preferować to bardziej niż odpowiedź Mikela na fajkę, ale jeśli naprawdę chcesz:

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

lub:

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

Źródło: http://unix.derkeiler.com/Newsgroups/comp.unix.solaris/2005-07/0991.html

ZakW
źródło
10

Cóż, wolę w ten sposób

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
źródło