Linux:shell 中的单行注释和多行注释

关于 shell 中的单行注释和多行注释

单行注释

众所周知 ,使用# 

比如想要注释 echo "Hello World"

[root@test ~]# vim test.sh
# echo "Hello World"

多行注释

        Shell 语言中是没有类似于 C/C++, Python 等计算机语言多行注释的功能的,可是对于脚本文件进行调试时,我们不可避免的需要对其中的代码进行注释,如果是很少的几行代码,手动的在每行首添加 # 就可以了,但是如果需要对于大量的代码块进行注释,手动的注释每行代码就不适用了。对于这个问题,推荐一些常用的方法。

第一种方法(利用 Here Document 特性):

        简单来说就是用一个空命令接收要注释的命令行,不做任何事情,以此来达到注释的目的。例如;

<< EOF
Cmd line 1
Cmd line 2
Cmd line 3
Cmd line 4
EOF

命令行在起始 << EOF 随后临近的 第一个 EOF 之间的内容都会被注释掉。

第二种方法,利用 Shell 中的空命令 : (冒号,注意其后有个空格)

可以说是第一种方法的拓展,这个命令不做任何动作,例如;

: "
Cmd line 1
Cmd line 2
Cmd line 3
Cmd line 4
"

        但是这里面会出现潜在的问题,如果被注释的 Cmd line 中有同类型的单或双引号时,注释是无效的。例如,

: "
Cmd line 1
Cmd line "2"
Cmd line 3
Cmd line 4
"

        在 Cmd line “2” 中有同类型的引号,那么第一个引号之前的内容会被“注释”掉,但是往后代码内容可能会报错,所以用这种方法之前,最好检查一下避免同类型引号的出现。

结合第一种和第二种方法,综合策略是,

: << EOF
Cmd line 1
Cmd line 2
Cmd line 3
Cmd line 4
EOF

其实这种命令类似于:

cat << EOF > /dev/null
Cmd line 1
Cmd line 2
Cmd line 3
Cmd line 4
EOF

cat 可以换成 lessmoreecho 等,> /dev/null 重导向命令类似于删除,不打印任何内容。

第三种方法,利用函数

        虽然说以上方法都能完成对多行代码的注释,但是它们也仅仅只是抑制了代码的执行和打印输出,Shell 还是会处理它们的,只是你看不到而已,这就不可避免的影响到了代码的执行效率。当然了,以现代计算机的处理速度,流处理文本文档上百万行都不会花费太多时间。可是,既然是被注释的代码,我们当然不想让它被执行。所以,这里推荐一个更终极的解决方法,那就是利用“函数”。

Shell 类似于 C/C++, Python, Java 等计算机语言也是可以定义函数的,定义的方法如下,

func_name () {
Cmd line 1
Cmd line 2
Cmd line 3
Cmd line 4
}

综合所述,即使 Shell 不能多行注释,但是我们通过其他的一些方法,仍然可以实现这样的功能, 其中函数定义的方式相比之下更加强大,即有效的避免了单双引号的问题,同时也避免了注释模块的执行效率问题。

你可能感兴趣的:(linux,知识,linux,注释,shell)