使用管道创建 shell 脚本并使用反斜杠继续行时,我想以健壮、可读和可移植的方式在单独的行中插入注释。
例如,给定这个未注释的多行命令(为了清晰起见,从@DigitalRoss 窃取):
echo abc |
tr a-z A-Z |
sort |
uniq
Run Code Online (Sandbox Code Playgroud)
......下面的内容在美学上最接近我想要完成的,但由于显而易见的原因,它不起作用......是的,我很清楚这通常不值得评论:
# 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
Run Code Online (Sandbox Code Playgroud)
现有的相关答案对我来说似乎并不令人满意,如下:
首先,glenn jackman 的答案(向数组添加参数,然后执行数组)适用于单个命令,但不适用于流水线(即使这样做,它也会增加我想避免的复杂性)。
其次,@Gilles 在这里的回答(使用:)似乎也不适用于流水线,因为它改变了流水线的流程:
$ echo "abc" | :
$
Run Code Online (Sandbox Code Playgroud)
(注意:如果有一个与:未修改的通过输出的等价物,那在美学上是可以接受的,但我一直无法找到一个。我可以编写一个自定义的,但它会降低可移植性。)
最后,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
Run Code Online (Sandbox Code Playgroud)
我正在寻找保持可读性和最小化复杂性的答案,或者一些关于为什么我正在寻找不可行的背景。
roz*_*acz 16
这个怎么样?
echo abc | \
# Convert lowercase to uppercase.
tr a-z A-Z | \
# Sort the results.
sort | \
# Only show unique lines.
uniq
Run Code Online (Sandbox Code Playgroud)
(反斜杠需要用作这些行中的最后一个字符。)我不确定这种方法的可移植性,但它肯定适用于 current bash。