对Bash的内联评论?

时间:2010-03-26 15:22:13

标签: bash comments

我希望能够在单行命令中注释掉单个标志。 Bash似乎只有from # till end-of-line条评论。我正在寻找像:

这样的技巧
ls -l $([ ] && -F is turned off) -a /etc

这很难看,但总比没有好。还有更好的方法吗?

以下似乎有效,但我不确定它是否可移植:

ls -l `# -F is turned off` -a /etc

9 个答案:

答案 0 :(得分:87)

我的首选是:

Commenting in a Bash script

  

这会有一些开销,但从技术上来说它确实回答了你的问题

echo abc `#put your comment here` \
     def `#another chance for a comment` \
     xyz etc
     

特别是对于管道,有一个没有开销的更清洁的解决方案

echo abc |        # normal comment OK here
     tr a-z A-Z | # another normal comment OK here
     sort |       # the pipelines are automatically continued
     uniq         # final comment
     

How to put a line comment for a multi-line command

答案 1 :(得分:54)

我发现只复制该行并注释掉原始版本是最简单的(也是最可读的):

#Old version of ls:
#ls -l $([ ] && -F is turned off) -a /etc
ls -l -a /etc

答案 2 :(得分:21)

$(: ...)有点不那么难看,但仍然不好。

答案 3 :(得分:4)

如何将其存储在变量中?

#extraargs=-F
ls -l $extraargs -a /etc

答案 4 :(得分:2)

大多数命令允许args以任何顺序出现。只需将注释标志移动到行尾:

ls -l -a /etc # -F is turned off

然后重新打开,只需取消注释并删除文字:

ls -l -a /etc -F

答案 5 :(得分:2)

这是我在多个管道命令之间进行内联注释的解决方案。

示例未注释的代码:

    #!/bin/sh
    cat input.txt \
    | grep something \
    | sort -r

管道注释的解决方案(使用辅助函数):

    #!/bin/sh
    pipe_comment() {
        cat - 
    }
    cat input.txt \
    | pipe_comment "filter down to lines that contain the word: something" \
    | grep something \
    | pipe_comment "reverse sort what is left" \
    | sort -r

或者如果您愿意,这里的解决方案没有辅助函数,但是它有点混乱:

    #!/bin/sh
    cat input.txt \
    | cat - `: filter down to lines that contain the word: something` \
    | grep something \
    | cat - `: reverse sort what is left` \
    | sort -r

答案 6 :(得分:1)

如果您知道变量为空,则可以将其用作注释。当然,如果它不是空的,它会搞砸你的命令。

ls -l ${1# -F is turned off} -a /etc

§ 10.2. Parameter Substitution

答案 7 :(得分:0)

如果评论值得一试,它可能会在行尾或单行上行。在任何语言的评论之前和之后,我都很少需要使用代码进行内部评论。

哦,有一个例外,这是我通常使用的SQL的方言,它使用'{comments}'。偶尔,我会写:

CREATE UNIQUE INDEX u1_table ON Table(...);
CREATE {DUPS} INDEX d1_table ON Table(...);

但即便如此也是如此。

答案 8 :(得分:0)

为了禁用像a && b这样的命令的一部分,我只是创建了一个路径上的空脚本x,所以我可以这样做:

mvn install && runProject

当我需要构建时,

x mvn install && runProject

何时不是(使用 Ctrl + A Ctrl + E 移动到开头和结尾)。

正如评论中所述,另一种方法是使用Bash内置:代替x

$  : Hello world, how are you? && echo "Fine."
Fine.