由于Shell不支持直接多行注釋,總結了以下Shell注釋多行的變通方法
一、通過Here Documents和:實現
1、最簡單方法
:<<BLOCK
注釋內容
BLOCK
把輸入重定義到前面的命令,但是:是空命令,所以就相當于注釋了。
如果注釋中有反引號的命令就會報錯。反引號部分沒被注釋掉,例如ab=`ls -l abc`就不會被注釋掉。
2、解決注釋中有反引號的問題
在windows的
cygwin環境中測試時報錯A、方法一
:<<BLOCK'
注釋內容
'BLOCK
B、方法二
C、方法三
以上三種方法都是通過在:<
BLOCK為Here Documents中的定義符號可以隨意起名,只要前后匹配就行了
3、簡單說說:指令和Here Documents
:就是什么也不作(do nothing)即空命令。它的最基本作用就是在if,then條件中。在if語句中各部分必須接執行命令,但有時你不在乎條件是為真(或假)只在乎相反情況。
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和:實現
2、until和:實現
注意注釋內容中是否含”done/fi”,包含會造成意外結束
三、其它方法1、方法一
: :||:<<\COMMENTS
....注釋內容
COMMENTS
高手說上面這種方法最好,因為Here Documents部分不會執行到,只會分析到,應該不會對第二個:作實際的IO重定向。
2、方法二
可以將里面的變量擴展關閉掉。
3、方法三
這種方法不用到Here Documents,不過這種方法要注意注釋內容中的}
4、方法四
上面方法可關掉Here Documents中的擴展功能,在Here-Document中忽略ending marker前的任何字符
實際上使用<<\EOF <<'EOF',甚至<<<\eof在語法上面更加的簡潔。不過這種方法同樣要注意注釋內容中的eof< p=""> <<\eof在語法上面更加的簡潔。不過這種方法同樣要注意注釋內容中的eof<>
四、參考資料
http://bbs.chinaunix.net/viewthread.php?tid=1152658&extra=&page=1
http://blog.csdn.net/magicpang/archive/2009/04/14/4072878.aspx
http://bbs.chinaunix.net/viewthread.php?tid=1196678&extra=&page=1