Как я могу прокомментировать каждую строку следующих строк из скрипта?
cat ${MYSQLDUMP} | \
sed '1d' | \
tr ",;" "\n" | \
sed -e 's/[asbi]:[0-9]*[:]*//g' -e '/^[{}]/d' -e 's/""//g' -e '/^"{/d' | \
sed -n -e '/^"/p' -e '/^print_value$/,/^option_id$/p' | \
sed -e '/^option_id/d' -e '/^print_value/d' -e 's/^"\(.*\)"$/\1/' | \
tr "\n" "," | \
sed -e 's/,\([0-9]*-[0-9]*-[0-9]*\)/\n\1/g' -e 's/,$//' | \
sed -e 's/^/"/g' -e 's/$/"/g' -e 's/,/","/g' >> ${CSV}
Если я попытаюсь добавить комментарий как:
cat ${MYSQLDUMP} | \ # Output MYSQLDUMP File
Я получил:
#: not found
Можно ли здесь комментировать?
Ответы:
Это будет иметь некоторые накладные расходы, но технически это действительно ответ на ваш вопрос:
А для трубопроводов, в частности, есть чистое решение без накладных расходов:
См. Вопрос переполнения стека. Как разместить комментарий к строке для многострочной команды .
источник
Завершающий обратный слеш должен быть последним символом в строке, чтобы его можно было интерпретировать как команду продолжения. Никакие комментарии или даже пробелы после него не допускаются.
Вы должны быть в состоянии поместить строки комментариев между вашими командами
источник
|
. Если вы попробуетеcat file1\<newline>#comment<newline>file2
, вы увидите, что вы не получитеcat file1 file2
, а скорееcat file1; file2
.cat file1 | # comment<newline>sort
работает отлично. То же самое делаетcat file1 && # comment<newline>echo foo
. Таким образом, комментарии могут быть включены после|
или&&
или||
, но не после `\` или в середине команды.Как указал DigitalRoss, завершающий обратный слеш не нужен, когда заканчивается строка
|
. И вы можете поместить комментарии в строку после|
:источник
Обратная косая черта экранирует знак #, интерпретируя его как его буквальный символ вместо символа комментария.
источник
$IFS
комментарий взломатьЭтот хак использует расширение параметра on
$IFS
, которое используется для разделения слов в командах:Так же:
Используя это, вы можете поместить комментарий в командной строке с продолжением:
но комментарий нужно будет перед
\
продолжением.Обратите внимание, что расширение параметра выполняется внутри комментария:
Редкое исключение
Единственный редкий случай, когда это терпит неудачу, - это если
$IFS
ранее начать с точного текста, который удаляется через расширение (т. Е. После#
символа):Обратите внимание на финал
foobar
нет места, иллюстрирующего проблему.Поскольку
$IFS
по умолчанию содержит только пробелы, это чрезвычайно маловероятно , что вы будете работать с этой проблемой.Кредит на комментарий @ PJH в который искрился от этого ответа.
источник
В дополнение к примерам от DigitalRoss, есть еще одна форма, которую вы можете использовать, если предпочитаете
$()
вместо обратных кавычек`
Конечно, вы можете использовать синтаксис двоеточия с обратными галочками:
Дополнительные замечания
Причина
$(#comment)
не работает, потому что как только он видит#
, он обрабатывает остальную часть строки как комментарии, включая закрывающие скобки:comment)
. Так что скобки никогда не закрываются.Обратные разборы обрабатываются по-разному и обнаруживают закрывающий обратный удар даже после a
#
.источник
Вот скрипт bash, который объединяет идеи и идиомы нескольких предыдущих комментариев, чтобы предоставить, с примерами, встроенные комментарии, имеющие общую форму
${__+ <comment text>}
.В частности
<comment text>
может быть многострочным<comment text>
не расширен параметромСуществует одно ограничение
<comment text>
, а именно: несбалансированные скобки'}'
и скобки')'
должны быть защищены (т. Е.'\}'
И'\)'
).Существует одно требование к локальной среде bash:
__
должно быть не заданоЛюбое другое синтаксически допустимое имя параметра bash будет использоваться вместо
__
, при условии, что имя не имеет заданного значения.Пример сценария следует
источник