如何为多行命令添加行注释

时间:2012-03-01 19:27:09

标签: bash shell comments

我知道如何在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

但遗憾的是,继续字符\之后的注释会破坏命令。

4 个答案:

答案 0 :(得分:519)

我就是这样做的。基本上通过使用Bash的反引号command substitution,可以将这些注释放在长命令行的任何位置,即使它是跨行分割的。我已将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`

答案 1 :(得分:64)

您可以将参数存储在数组中:

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

但是,如果只是为了允许对每个参数发表评论,我认为这看起来有些过时。因此,我只需重写注释,使其引用各个参数,并将其置于整个命令之上。

答案 2 :(得分:53)

我担心,一般来说,你不能做你所要求的。您可以做的最好的事情是对命令前的行进行注释,或者在命令行末尾添加一条注释,或者在命令后注释注释。

您无法通过这种方式在命令中散布评论。 \表示合并行的意图,所以对于所有意图和目的,你试图在一行中散布注释,这无论如何都不起作用,因为\必须在该行的结尾有这种效果。

答案 3 :(得分:16)

根据pjh对another answer to this question的评论,将IFS替换为已知不包含非空白字符的变量。

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