如何注释掉Shell脚本中的特定行


71

谁能提出除shell脚本之外的其他注释建议#

假设我要评论五行。除了添加#到每一行之外,还有其他方法可以注释这五行吗?


1
不幸的是不在sh,Bash和Perl中。
丹尼尔·卡米尔·科扎尔

6
#。仅可通过Leading进行注释。没有多行注释(例如/* ... */在php中)。
fedorqui'SO stop harm''13 Stop

顺便说一句,它们被称为“阻止评论”
wyu

Answers:


35

您可以使用条件注释脚本的部分。

例如,以下脚本:

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。)


22

是的(尽管这很讨厌)。您可以这样使用heredoc

#!/bin/sh

# do valuable stuff here
touch /tmp/a

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

这是在做什么 Aheredoc将所有以下所有输入馈送到指定命令中的终止符(在本例中为EOF)。因此,您可以将要注释的代码括起来

echo <<EOF
...
EOF

它将获取两个EOF之间包含的所有代码,并将它们提供给echoecho不会从stdin中读取,因此会全部丢弃)。

请注意,通过上述操作,您可以在中添加任何内容heredoc。它不一定是有效的shell代码(即,它不必正确解析)。

这太讨厌了,我仅将其作为兴趣点。你不能做C的等价物/* ... */


1
您可能想使用以外的东西echo,否则将回显发送到/ dev / null。
2013年

是。该命令无关紧要。我确实注意到在我的Cygwin终端上,该回声未读到stdin。我怀疑实现方式有所不同
Brian Agnew

不,它不会读取任何内容,但是会输出空白行。true可能会更好。
2013年

1
:,它可能比效率更高true(尽管实际上,两者都不会降低脚本速度)。出于注释代码的目的,它可能更具可读性,原因是它看起来好像不应该做任何事情。
chepner

7

对于单行注释添加 在一行的开始
多行注释添加 要从哪里开始和补充(单引号) 在这里要结束注释行点(再次单引号)。


1
尝试突出显示关键字并保持格式清晰,这将有助于您为其他人提供答案
Agilanbu

5

您必须依靠“#”,但要使任务在vi中更容易,您可以执行以下操作(首先按转义):

:10,20 s/^/#

其中10和20是要注释掉的行的开始和结束行号

并在完成后撤消:

:10,20 s/^#//
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.