我知道如何在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
但遗憾的是,继续字符\
之后的注释会破坏命令。
答案 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}