Bash
在帶有管道的多行 bash 命令中的單獨行上的可讀註釋?
在使用管道創建 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
現有的相關答案對我來說似乎並不令人滿意,如下:
首先,格倫傑克曼的回答(向數組添加參數,然後執行數組)適用於單個命令,但不適用於流水線(即使它這樣做,它也會增加我想避免的複雜性)。
其次,@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
我正在尋找保持可讀性和最小化複雜性的答案,或者一些關於為什麼我正在尋找的東西不可行的背景。
這個怎麼樣?
echo abc | \ # Convert lowercase to uppercase. tr a-z A-Z | \ # Sort the results. sort | \ # Only show unique lines. uniq
(反斜杠需要用作這些行中的最後一個字元。)我不確定這種方法的可移植性,但它確實適用於 current
bash
。
這有點愚蠢和低效,但它確實有效,而且它適用於
|
-first 風格。# Add a comment to a pipeline, old-school BASIC-style function REM { cat } cmd1 \ | REM "comment on cmd2" \ | cmd2 \ | REM "comment on cmd3" \ | cmd3
也就是說,如果我在生產程式碼中看到它,我可能會不高興並衝著寫它的人大喊大叫,所以使用,呃,要小心。
更嚴重的是,
{}
塊呢?cmd1 \ | { # comment on cmd2 cmd2 } \ | { # comment on cmd3 cmd3 }