#1 楼
那不是多行注释。#
是单行注释。 :
(冒号)根本不是注释,而是一个外壳内置命令,基本上是一个NOP,是一个空操作,除了返回true以外,什么都不做,例如true
(因此将$?
设置为0作为a副作用)。但是,由于它是命令,因此它可以接受参数,并且由于它忽略其参数,因此在大多数情况下,它表面上像注释。这种冲突的主要问题是论点仍在扩展,导致许多意想不到的后果。参数仍然受到语法错误的影响,仍然执行重定向,因此: > file
将截断file
,并且: $(dangerous command)
替换仍将运行。即使是多行注释也要坚持下去。切勿尝试(ab)使用#
发表评论。 shell中没有专用的多行注释机制,类似于类似于:
的语言中的斜线/* */
形式。建议的做法,我会提到可以使用here-documents做多行“注释”:: <<'end_long_comment'
This is an abuse of the null command ':' and the here-document syntax
to achieve a "multi-line comment". According to the POSIX spec linked
above, if any character in the delimiter word ("end_long_comment" in
this case) above is quoted, the here-document will not be expanded in
any way. This is **critical**, as failing to quote the "end_long_comment"
will result in the problems with unintended expansions described above.
All of this text in this here-doc goes to the standard input of :, which
does nothing with it, hence the effect is like a comment. There is very
little point to doing this besides throwing people off. Just use '#'.
end_long_comment
评论
+1非常重要,以使<<上的单引号保持不变-这会关闭替换和扩展。
–格伦·杰克曼
2012年4月27日在12:11
另外要特别注意的是,用:填充shell脚本,因为应该注释的内容会导致额外的RAM / CPU消耗。它不会满足于桌面上的简单操作,但是如果每秒执行数百次或数千次操作,您将无所事事,而且速度很快。
– bahamat
2012年8月29日在21:28
@bahamat:如果您每秒执行数百或数千次操作,希望您不要在shell中编写它... = /
– 7heo.tk
2014年5月24日在1:40
有时,对多行文本使用null实用程序可能会很有用。以:<< = cut开头的注释使可以在shell脚本中编写POD,有关详细信息,请参见此示例。这样就可以使用perldoc script.sh。但是,此答案中显示的多行注释绝对是注释块(每行以#开头)。
–basic6
2014年12月4日上午10:14
这是一个关于Heredocs的精彩讨论,用于注释和其他有趣的用例(甚至包括dynaimc脚本生成):tldp.org/LDP/abs/html/here-docs.html#EX71C
– bguiz
16年8月22日在1:02
#2 楼
这不是任何评论风格。:
内置命令绝对不执行任何操作;在这里被评论滥用了。$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
#3 楼
在早期的shell中,冒号是创建注释的唯一方法。但是,这不是真正的注释,因为该行的解析方式与其他命令完全相同解析,可能会有副作用。对于
示例:
: ${a:=x} # assigns the value 'x' to the variable, 'a'
: $(command) # executes 'command'
(有时,冒号仅用于调用这些副作用
,但后来并未使用作为注释。)
使用冒号注释掉一段脚本有时会很方便
:
: '
while [ "$n" -ne "$x" ]
do
: whatever
done
'
与每行前面加上
#
相比,这是一个很好的节省时间,尤其是如果注释只是暂时的。
评论
单引号注释方法不适用于本身使用单引号的脚本的任何部分。而且,如果您在尽可能多的地方使用引号,则意味着整个脚本中都会散布合法的单引号。仅使用任何可让您进行逐行注释的体面的编辑器,就这么简单。
– jw013
13年1月16日在21:18
您说对了,只有在引用部分中没有单引号的情况下,它才有效。但是,脚本不必使用很多单引号。在查看我的一些脚本时,我发现它们相对稀疏,许多可以用双引号代替。
–克里斯·约翰逊(John F.A. Johnson)
13年7月8日在1:36
单引号或双引号的选择应该几乎不受琐碎且无关紧要的事情的影响,例如脚本的文本本身是否是有效的单引号字符串。单引号用于防止扩展,而双引号则允许某些扩展并需要额外的分析。这是确定使用哪个的真正标准。
– jw013
13年7月11日在3:27
到目前为止,这是最时髦的方法。非常适合少量文档。我比/ * * /更喜欢它,呃,别让我开始<!-->!
–alex灰色
2013年9月5日23:13
#4 楼
如果您的注释在脚本的结尾,则可以这样进行:#!/bin/sh
echo 'hello world'
exec true
we can put whatever we want here
\'\"$\`!#%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
abcdefghijklmnopqrstuvwxyz{|}~
评论
如果您将代码包装到函数中以将其注释掉怎么办? CommentedOutBlock(){echo“ test”; }正如其他人已经提到的那样,多行注释本机不可用。所以我用if假;然后<您想要多少行> fi