Как поместить комментарий строки для многострочной команды
Я знаю, как написать многострочную команду в 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
Но, к сожалению, комментарий после символа продолжения \
нарушит команду.
Ответы
Ответ 1
Я боюсь, что, в общем, вы не можете делать то, о чем просите. Лучшее, что вы можете сделать, это комментарий к строкам перед командой или один комментарий в конце командной строки или комментарий после команды.
Таким образом, вы не можете интерпретировать комментарии внутри команды. \
выражают намерение объединить строки, поэтому для всех целей и задач вы пытаетесь просмотреть комментарии в одной строке, что не работает, так как \
должен быть в конце строки, чтобы имеют этот эффект.
Ответ 2
Вот как я это делаю. По сути, используя подстановку команд 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'
Ответ 3
Вы можете хранить аргументы в массиве:
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[@]}"
Однако я думаю, что это выглядит немного хакерским, если только для того, чтобы давать комментарии для каждого аргумента. Поэтому я просто переписал комментарий, чтобы он ссылался на отдельные аргументы и помещал его над всей командой.
Ответ 4
На основе pjh прокомментируйте другой ответ на этот вопрос, заменив IFS
на переменную, которая, как известно, не содержит непробельных символов.
comment=
who ${comment# This is the command} \
-u ${comment# This is the argument}