Я знаю, как написать многострочную команду в Bash script, но как добавить комментарий для каждой строки в многострочной команде?
CommandName InputFiles \ # This is the comment for the 1st line
--option1 arg1 \ # This is the comment for the 2nd line
--option2 arg2 # This is the comment for the 3nd line
Но, к сожалению, комментарий после символа продолжения \
нарушит команду.
Я боюсь, что, в общем, вы не можете делать то, о чем просите. Лучшее, что вы можете сделать, это комментарий к строкам перед командой или один комментарий в конце командной строки или комментарий после команды.
Таким образом, вы не можете интерпретировать комментарии внутри команды. \
выражают намерение объединить строки, поэтому для всех целей и задач вы пытаетесь просмотреть комментарии в одной строке, что не работает, так как \
должен быть в конце строки, чтобы имеют этот эффект.
\
s эффективно объединяет эти строки» даже не правильно, проблема в том, что обратный слеш должен немедленно предшествовать символу новой строки, чтобы избежать его, тогда как с cmd \ # comment
есть пробел и комментарий между обратная косая черта и новая строка.
Вот как я это делаю. По существу, используя Bash backtick подстановка команд, можно поместить эти комментарии в любом месте вдоль длинной командной строки, даже если она разделена по строкам. Я поставил команду echo перед вашим примером, чтобы вы могли выполнить этот пример и посмотреть, как он работает:
echo CommandName InputFiles `#1st comment` \
--option1 arg1 `#2nd comment` \
--option2 arg2 `#3rd comment`
Другой пример, где вы можете поместить несколько комментариев в разных точках в одной строке:
some_cmd --opt1 `#1st comment` --opt2 `#2nd comment` --opt3 `#3rd comment`
Вы можете хранить аргументы в массиве:
args=(InputFiles # This is the comment for the 1st line
# You can have whole lines of comments in between, useful for:
#--deprecated-option # This isn't use any more
--option1 arg1 # This is the comment for the 2nd line
# And even blank lines in between for readability
--option2 arg2 # This is the comment for the 3nd line
)
CommandName "${args[@]}"
Однако я думаю, что это выглядит немного хакерским, если только для того, чтобы давать комментарии для каждого аргумента. Поэтому я просто переписал комментарий, чтобы он ссылался на отдельные аргументы и помещал его над всей командой.
>
и <
и |
и ||
и &&
и так далее.
--option arg
имеет как '
и "
.
На основе pjh комментировать еще один ответ на этот вопрос, заменив IFS
на переменную, которая, как известно, не содержит небелых пробелов.
comment=
who ${comment# This is the command} \
-u ${comment# This is the argument}