由於Shell不支援直接多行注釋,總結了以下Shell注釋多行的變通方法 一、通過Here Documents和:實現 1、最簡單方法 :<<BLOCK ....注釋內容 BLOCK 把輸入重定義到前面的命令,但是:是空命令,所以就相當於注釋了。 如果注釋中有反引號的命令就會報錯。反引號部分沒被注釋掉,例如ab=`ls -l abc`就不會被注釋掉。 2、解決注釋中有反引號的問題 A、方法一 :<<BLOCK' ....注釋內容 'BLOCK B、方法二 :<<'BLOCK ....注釋內容 BLOCK' C、方法三 :<<' ....注釋內容 ' 以上三種方法都是通過在:< BLOCK為Here Documents中的定義符號可以隨意起名,只要前後匹配就行了 3、簡單說說:指令和Here Documents :就是什麼也不作(do nothing)即空命令。它的最基本作用就是在if,then條件中。在if語句中各部分必須接執行命令,但有時你不在乎條件是為真(或假)只在乎相反情況。 例如如果檢測存在某路徑什麼也不做,不存在就echo報錯。可寫為 if [ -d $DIRECTORY ]; then : #do nothing eles echo "the directory do not exit " fi 下面的例子 command<<word any input file content word 是Here Documents的用法,意思是將以上的定義符(word,也可以理解成本地文檔名)傳給某指令碼或命令,word的內容為兩個word間輸入任意內容(word為Here Documents中的定義符號可以隨意起名,只要前後匹配就行了),這樣就可以在指令碼中用command來執行輸入而不必再重建一檔案。 常用在菜單螢幕中,例如: cat <<Menu 1. List files 2.HELP 3.exit Menu :<<word ....注釋內容 word 就類似於建一本地檔案,然後對它執行空命令,也就是什麼也不做,就相當於注釋了。 更詳細的Here Document說明可參考http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/here-docs.html 二、通過迴圈實現 1、while和:實現 while : do break 注釋內容 done 2、until和:實現 until : 注釋內容 done 注意注釋內容中是否含”done”,包含會造成意外結束迴圈 三、其它方法 1、方法一 : :||:<<\COMMENTS ....注釋內容 COMMENTS 高手說上面這種方法最好,因為Here Documents部分不會執行到,只會分析到,應該不會對第二個:作實際的IO重新導向。 2、方法二 : << 'BLOCK' 可以將裡面的變數擴充關閉掉。 例如: :~> A=B :~> cat <<END > this is \$A: $A > END this is $A: B :~> cat <<'END' > this is \$A: $A > END this is \$A: $A 3、方法三 :||{ ....注釋內容 } 這種方法不用到Here Documents,不過這種方法要注意注釋內容中的} 4、方法四 :<<\EOF ....注釋內容 EOF 上面方法可關掉Here Documents中的擴充功能,在Here-Document中忽略ending marker前的任何字元 實際上使用<<\EOF <<‘EOF’,甚至<<<\EOF在文法上面更加的簡潔。不過這種方法同樣要注意注釋內容中的EOF