在带有管道的多行bash命令中的单独行上可读的注释?


14

使用管道创建Shell脚本并使用反斜杠继续行时,我想以健壮,可读和可移植的方式在单独的行上插入注释。

例如,给出以下未注释的多行命令(为清晰起见,从@DigitalRoss盗取):

echo abc |
     tr a-z A-Z |
     sort |
     uniq

...从美学上讲,以下内容与我要完成的工作最接近,但是出于明显的原因,它不起作用...是的,我很清楚,这通常不值得评论:

# Perform critical system task.
# NOTE - An example of what does *not* work.
echo abc |
    # Convert lowercase to uppercase.
     tr a-z A-Z |

     # Sort the results.
     sort |

     # Only show unique lines.
     uniq

现有的相关答案对我来说并不令人满意,如下所示:

首先,glenn jackman的答案(向数组添加参数,然后执行数组)适用于单个命令,但不适用于流水线操作(即使这样做,也增加了我想避免的复杂性)。

其次,@ Gilles在这里的答案(使用:)也似乎不适用于流水线,因为它改变了流水线:

$ echo "abc" | :
$

注意:如果有一个等效项可以:传递未修改的输出,这在美学上是可以接受的,但我找不到它。我可以编写一个自定义的,但是会降低可移植性。)

最后,DigitalRoss关于StackOverflow的答案的最后部分很好地用于在同一行上添加注释,但是我强烈希望在单独的行上添加注释。否则,当行的长度变化很大时,可读性会降低:

echo abc |         # normal comment OK here`
     /usr/local/bin/really/long/path/ridiculously-long-filename.sh |  # another normal comment OK here
     sort |        # the pipelines are automatically continued
     uniq          # final comment

我正在寻找能够保持可读性并最大程度地减少复杂性的答案,或者寻找一些关于为什么我要寻找的东西不可行的背景。


1
关于您的评论的注释:有人教我写评论来解释工作的一部分或单元。如果有经验的编码人员写出描述他们正在做什么的智能注释,那么大概每个维护脚本的人都可以在不了解使用细节的情况下使用手册页。永远不要写像这样的评论i++; // increment i by one。我建议您阅读“编程风格的要素”
bsd

我想我将删除最后的编辑。一个问题包含问题,对答案的反驳以及答案本身是很不寻常的,但是在这里,解释为什么其他答案不起作用的部分很有必要。rozcietrzewiacz的回答和您的评论共同解释了这个问题(由于问题与他所描述的完全不同,我个人将发布一个单独的答案并接受该回答,但这是
可行的

理解-感谢您的反馈;学过的知识!
罗伊斯·威廉姆斯

Answers:


14

这个怎么样?

echo abc | \
# Convert lowercase to uppercase.
tr a-z A-Z | \

# Sort the results.
sort | \

# Only show unique lines.
uniq

(反斜杠必须用作这些行中的最后一个字符。)我不确定该方法的可移植性,但它肯定可以与current一起使用bash


啊哈!(facepalm)我在发布问题时改变了我实际上使用的成语,而没有意识到!我将管道放在每行的开头,现在我很高兴停止这样做,因为我知道此方法在bash和sh中可以访问的所有系统上都可以正常工作。谢谢!
罗伊斯·威廉姆斯

这些评论不会破坏行的延续吗?
Stuart P. Bentley'17

只要每个注释前都有一个空行,它就可以正常工作。
罗伊斯·威廉姆斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.