我希望能够在单行命令中注释掉单个标志。Bash似乎只有from # till end-of-line
意见。我正在看一些技巧:
ls -l $([ ] && -F is turned off) -a /etc
这很丑,但总比没有好。有没有更好的办法?
以下内容似乎可行,但我不确定它是否可移植:
ls -l `# -F is turned off` -a /etc
我希望能够在单行命令中注释掉单个标志。Bash似乎只有from # till end-of-line
意见。我正在看一些技巧:
ls -l $([ ] && -F is turned off) -a /etc
这很丑,但总比没有好。有没有更好的办法?
以下内容似乎可行,但我不确定它是否可移植:
ls -l `# -F is turned off` -a /etc
Answers:
我的首选是:
这会有一些开销,但是从技术上讲,它确实可以回答您的问题
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
$(#comment)
但不起作用。
)
注释本身的一部分。bash面临的大多数挑战是由于与旧版本的复古兼容性,一种常见的策略是使用最旧的解决方案。
true && `# comment` && true
是有效的表达式。真正的评论将产生如下内容:syntax error near unexpected token
&&'`
我发现复制行并注释掉原始版本是最简单(也是最易读)的:
#Old version of ls:
#ls -l $([ ] && -F is turned off) -a /etc
ls -l -a /etc
$(: ...)
有点丑陋,但还是不好。
$(: ...)
语法实际上似乎不允许嵌入注释:虽然echo "foo" `# comment` "bar"
将在第二个反引号处终止注释,但是假定的等效项echo "foo" $(: # comment) "bar"
不会解析#
。之后的任何内容。
如何将其存储在变量中?
#extraargs=-F
ls -l $extraargs -a /etc
这是我在多个管道命令之间进行内联注释的解决方案。
示例未注释的代码:
#!/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
${name:=comment}
是安全的。
为了禁用部分命令,例如a && b
,我只是创建了一个空脚本x
,该脚本位于路径上,因此我可以执行以下操作:
mvn install && runProject
当我需要建造时,以及
x mvn install && runProject
不使用时(使用Ctrl + A和Ctrl + E移至起点和终点)。
如评论中所述,另一种方法是内置Bash :
而不是x
:
$ : Hello world, how are you? && echo "Fine."
Fine.
:
如:string; of; commands; : disabled; enabled;
#comment
技巧也这里提到:stackoverflow.com/questions/9522631/...