web-dev-qa-db-ja.com

複数行のコマンドに行コメントを付ける方法

Bashスクリプトで複数行コマンドを作成する方法は知っていますが、複数行コマンドの各行にコメントを追加するにはどうすればよいですか?

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

しかし、残念ながら、継続文字\の後のコメントはコマンドを中断します。

273
Peter Lee

一般的に、あなたが求めていることはできないと思います。最善の方法は、コマンドの前の行にコメントを付けるか、コマンドラインの最後に1つのコメントを付けるか、コマンドの後にコメントを付けることです。

この方法では、コマンド内にコメントを散在させることはできません。 \sは行をマージする意図を表します。そのため、すべての意図と目的のために、コメントを1行に散在させようとします。これは\が行末でその効果があります。

54
Perry

これが私のやり方です。基本的には、Bashのバックティック コマンド置換 を使用することにより、長いコマンドラインに沿ってこれらのコメントを配置できます。サンプルを実行してその動作を確認できるように、サンプルの前にechoコマンドを配置しました。

echo CommandName InputFiles `#1st comment` \
             --option1 arg1 `#2nd comment` \
             --option2 arg2 `#3rd comment`

1行の異なるポイントに複数のコメントを入力できる別の例:

some_cmd --opt1 `#1st comment` --opt2 `#2nd comment` --opt3 `#3rd comment`
526

引数を配列に保存できます:

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[@]}"

ただし、各引数のコメントを許可することのみを目的とする場合、これは少しハックに見えると思います。したがって、個々の引数を参照するようにコメントを書き直し、コマンド全体の上に置きます。

64
Philipp

この質問に対する別の回答 へのpjhのコメントに基づいて、IFSを非空白文字を含まないことがわかっている変数に置き換えます。

comment=
who ${comment# This is the command} \
    -u ${comment# This is the argument}
16
chepner