对 Bash 的内联评论?

我希望能够在一行命令中注释掉一个标志。Bash 似乎只有 from # till end-of-line注释。我看到的是这样的把戏:

ls -l $([ ] && -F is turned off) -a /etc

虽然很丑,但总比什么都没有好,有更好的办法吗?

下面的方法似乎可行,但我不确定它是否便于携带:

ls -l `# -F is turned off` -a /etc
208703 次浏览

$(: ...)稍微好一点,但还是不好。

我发现最简单(也是最易读的)的方法就是复制这一行,然后对原始版本进行注释:

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

大多数命令允许按任意顺序输入参数。只需将注释标志移动到行的末尾:

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

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

ls -l -a /etc -F

下面是我对多个管道命令之间的内联注释的解决方案。

未注释代码示例:

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

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

    #!/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

或者,如果您愿意,这里有一个没有 helper 函数的相同解决方案,但是有点混乱:

    #!/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

把它存储在一个变量中怎么样?

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

如果你知道一个变量是空的,你可以用它作为一个注释。当然,如果它不是空的,它会弄乱你的命令。

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

参数替换

我的首选是:

在 Bash 脚本中注释

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

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

如何为多行命令放置行注释

为了禁用像 a && b这样的命令的一部分,我只是创建了一个位于 path 上的空脚本 x,因此我可以执行以下操作:

mvn install && runProject

当我需要建造的时候

x mvn install && runProject

当没有时(使用 Ctrl + ACtrl + E移动到开始和结束)。

正如评论中提到的,另一种方法是 Bash 内置的 :而不是 x:

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

看来 $(...)不能从 ps -ef存活下来。

我的场景是,我希望有一个虚拟的参数,可以用来确定非常进程。我通常使用这种方法,但是这种方法并不适用于所有地方。例如,python program.py类似于

mkdir -p MyProgramTag;python MyProgramTag/../program.py

MyProgramTag将是用于标识已启动进程的标记。