Коментарі в багаторядковій команді bash


32

Цей файл сценарію BASH з однією командою важко зрозуміти, тому я хочу написати коментар до кожної дії:

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

(sed - це лише приклад, насправді це суміш грепсів, trs і awks)

Мені б не хотілося дублювати рядки або мати кожен коментар далеко від рядка, до якого він стосується.
Але в той же час БАШ, здається, не допускає "внутрішніх" коментарів.

Якийсь елегантний спосіб вирішити цю проблему?

Відповіді:


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

Якщо у вас виникло це питання, дивлячись прокоментувати нелінійну команду без рядків:

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

Якщо ви робите щось по-справжньому перекручене, як автоматизувати коментування, я не можу побачити причини віддати перевагу цьому над відповіддю Мікель за трубку, але якщо ви дійсно хотіли:

$ 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/' 
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.