Как поместить комментарий строки для многострочной команды

Я знаю, как написать многострочную команду в 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}