2013-08-21 79 views
38

任何一個可以建議如何評論的特定行比#其他shell腳本,如何在shell腳本中註釋特定行?

想,如果我要發表評論,而不是添加#每行5條線路,是否有任何其他的方式來發表意見5行呢?

在此先感謝。

+1

可惜不是SH,猛砸,和Perl。 –

+5

編號註釋可以通過前導'#'來完成。沒有多行註釋(例如'/ * ... * /'在PHP中)。 – fedorqui

+0

他們被稱爲「阻止評論」的方式 – wyu

回答

11

是的(雖然這是一個討厭的黑客)。您可以使用heredoc這樣的:

#!/bin/sh 

# do valuable stuff here 
touch /tmp/a 

# now comment out all the stuff below up to the EOF 
echo <<EOF 
... 
... 
... 
EOF 

這是什麼做的? A heredoc將以下所有輸入提供給終止符(在這種情況下爲EOF),並將其輸入到指定的命令中。所以,你可以圍繞你希望與

echo <<EOF 
... 
EOF 

註釋掉的代碼,它會採取所有包含兩個的EOF之間的代碼和養活他們echoecho不從標準輸入讀取所以這一切又拋出遠)。

請注意,有了上述,你可以把任何東西放在heredoc。它不一定是有效的shell代碼(即它不需要正確解析)。

這是非常討厭的,我只提供它作爲一個興趣點。您無法完成與C相同的操作/* ... */

+1

您可能想要使用「echo」以外的內容,否則將回顯發送到/ dev/null。 – ams

+0

是的。該命令並不重要。我注意到,在我的Cygwin終端上,但是,該回聲沒有讀取stdin。我懷疑實現有所不同 –

+0

不,它不*讀*任何東西,但它*輸出*一個空行。 「真實」可能會更好。 – ams

24

您可以使用條件註釋腳本部分。

例如,下面的腳本:

DEBUG=false 
if ${DEBUG}; then 
echo 1 
echo 2 
echo 3 
echo 4 
echo 5 
fi 
echo 6 
echo 7 

將輸出:

6 
7 

爲了取消註釋的一段代碼,你只需要評論的變量:

#DEBUG=false 

(這樣做會打印數量別爾斯1至7)

0

你必須要依靠「#」反而使任務更容易在vi可以執行以下操作:

:10,20 s/^/# 

與10和20作爲起始和終止行號該行要註釋掉

,並撤消你完成時:

:10,20 s/^#//