续行+行注释,在同一行?

时间:2014-08-27 14:03:00

标签: bash shell sh

我在shell脚本中调用了很长的参数列表:

foo-command \
    --important-argument $ONE \
    --indispensable-flag $ENABLED \
    --an-optional-toggle "will probably be commented out some day" \
    $ARGUMENTS \
    $MORE_ARGUMENTS

我无法在此多行电话中插入评论,可以吗?

例如,假设我如何评论--an-optional-toggle行?
如何在# in sorted order之后添加$ARGUMENTS条评论?

无论我尝试什么,octothorp #符号阴影线延续反斜杠\,反之亦然。有什么建议吗?

3 个答案:

答案 0 :(得分:7)

不,但您可以将参数存储在数组中。这允许您注释掉单个行以及包含散布的注释。

args=( --important-argument "$ONE"
       --indispensable-flag "$ENABLED"
       # --an-optional-toggle "will probably be commented out some day"
       $ARGUMENTS  # in sorted order
       $MORE_ARGUMENTS
     )
foo-command "${args[@]}"

请注意,您几乎肯定也希望制作ARGUMENTSMORE_ARGUMENTS数组,因此args最终会看起来像

args=( --important-argument "$ONE"
       --indispensable-flag "$ENABLED"
       # --an-optional-toggle "will probably be commented out some day"
       "${ARGUMENTS[@]}"  # in sorted order
       "${MORE_ARGUMENTS[@]}"
     )

答案 1 :(得分:6)

尝试反引号评论黑客 as proposed in an earlier response同样的问题。

在您的情况下,这将是:

foo-command \
    --important-argument $ONE \
    --indispensable-flag $ENABLED \
    `#--an-optional-toggle "will probably be commented out some day"` \
    $ARGUMENTS \
    $MORE_ARGUMENTS

答案 2 :(得分:1)

foo-command $(
    # hello
    printf --important-argument $ONE # free as a bird
    printf --indispensable-flag $ENABLED
    # to comment anywhere we wish
    printf --an-optional-toggle "will probably be commented out some day"
    printf $ARGUMENTS
    printf $MORE_ARGUMENTS
)

这并不完美:回复-n很难,因为echo解释它;如果您希望保留它们等等,引号可能会消失。事实上,如下面的评论者所说,引用的字符串会被破坏;也许你可以解决这个问题,但如果你有Bash,其他答案会更好。