我们写shell脚本时,经常需要注释多行,但在每一行前输入#有些麻烦。基于 shell命令的灵活性,我们可以使用下面的方法。
1. 采用HERE DOCUMENT特性
格式:
<<'COMMENT'
...
COMMENT
例子:
#!/bin/bash
echo "Say Something"
<<COMMENT
注释行1
注释行2
...
注释行n
COMMENT
2. 采用:
冒号:
可用于多行注释。
格式:
: ' # : + 空格 + 单引号
注释行1
注释行2
... 注释行n
'
例子:
#!/bin/bash
echo "Say Something"
: ' # : + 空格 + 单引号 注释行1 注释行2 ... 注释行n '
这种做法有很多局限性,而且会影响性能。首先,冒号:
是shell内置命令,它的帮助说明:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
即冒号:
也是一个shell命令,可以给它传参数,但因为冒号:
会过滤掉这些参数,而单引号括起来的普通代码表示字符串,所以我们可用冒号:
表示注释。在程序执行时,冒号:
后单引号括起来的部分不会执行。
潜在的问题:
- 冒号
:
不会注释shell脚本中本身带有单引号的语句部分,除非你把程序中的单引号全部换成又引号。 - 虽然冒号
:
忽视后面的参数,但其实参数部分还是可能会被执行一些操作,比如替换操作,文件截取操作等,这样会影响到代码的执行效率。例如: > file
会截取file ,: $(dangerous command)
替换操作照样会执行。
所以第二种方法,只能临时用用。
3. 采用 : + << ‘COMMENT’
#!/bin/bash
echo "Say Something"
: <<'COMMENT'
注释行1
注释行2
...
注释行n
COMMENT
注意:要加上单引号,虽然有时不加不会有什么问题,但还是要防止出现莫名其妙的意外,比如发生字符扩展,命令替换等。最保险的方法还是每行前加上#