页面“Shell too many arguments”与“Shell 多行注释详解”之间的差异
(页面间的差异)
跳到导航
跳到搜索
小 (导入1个版本) |
docker>Evan |
||
第1行: | 第1行: | ||
− | = | + | 在我们写 shell 脚本的时候,特别在调试的时候经常需要注释多行命令,但在每一行前输入 # ,显得有些麻烦。 |
+ | |||
+ | 基于 shell 命令的灵活性,我们可以使用下面的方法: | ||
+ | |||
+ | =方法一(这是比较稳妥的作法):可以采用 HERE DOCUMENT 特性,实现多行注释= | ||
<pre> | <pre> | ||
− | + | <<'COMMENT' | |
− | + | ... | |
− | + | ||
− | + | COMMENT | |
− | + | 举例如下: | |
− | |||
− | + | #!/bin/bash | |
− | + | echo "Say Something" | |
− | + | <<COMMENT | |
− | echo " | + | your comment 1 |
− | + | comment 2 | |
+ | blah | ||
+ | COMMENT | ||
+ | echo "Do something else"</pre> | ||
− | + | =方法二 ,直接采用 : = | |
− | + | <pre>这个命令的特殊作用,但这种做法有很多局限性,而且会影响性能,下面会介绍它的原理及性能分析。 | |
− | + | 如下是最简单的使用方法: | |
− | + | : ' | |
+ | COMMENT1 | ||
+ | COMMENT2 | ||
+ | ' | ||
+ | |||
+ | 即 : + 空格 + 单引号。 | ||
+ | |||
+ | 解释如下: | ||
+ | |||
+ | 首先要知道 : 在 shell 中的特殊作用,它是内置的命令,先看一下它的帮助说明: | ||
+ | |||
+ | $ help : | ||
+ | :: : | ||
+ | Null command. | ||
+ | No effect; the command does nothing. | ||
+ | Exit Status: | ||
+ | Always succeeds. | ||
+ | |||
+ | 即,: 它也是一个命令,既然是命令就会可以给它传参数,但因它会过滤掉这些参数,而单引号括起来的是普通的代码部分表示字符串,所以我们刚好可将来用来代表注释,表示在 : 后的 单引号括起来的部分在程序执行的时候忽略。 | ||
+ | |||
+ | 另外如果不好理解,直接把它当作汇编中的 NOP, python 中的 pass ,它只是一个占位,每次返回都是真,即 $? 的话,结果会是 0 。 | ||
+ | |||
+ | 如此一来,此方法是不是很绝妙? 但事实上里面潜藏着很多问题: | ||
+ | |||
+ | 它不会注释 shell 脚本中本身带有单引号的语句部分,除非你将程序中的单引号全部换成又引号,这样不爽。 | ||
+ | 还是就是,虽然 : 会忽视后面的参数,但其实参数部分还是可能会被执行些操作,比如替换操作,文件截取操作等。所以这样会影响到代码的执行效率。 | ||
+ | 例如: | ||
+ | : > file 会截取 file 。 | ||
+ | : $(dangerous command) 这个替换操作照样会执行。 | ||
+ | 所以第二种方法,只能临时用用。</pre> | ||
+ | |||
+ | =第三种方法,即:采用 : + << 'COMMENT' 的方式= | ||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | echo "Say Something" | ||
+ | : <<'COMMENT' | ||
+ | your comment 1 | ||
+ | comment 2 | ||
+ | blah | ||
+ | COMMENT | ||
+ | echo "Do something else" | ||
− | + | 注意:要加上单引号部分,有时候虽然不加不会有什么问题,但还是要加,以防出现莫名其妙的意外发生,比如发生字符扩展,命令替换等。 | |
− | |||
− | + | 但最保险的方法还是每行前加上 #</pre> | |
− | |||
− | [[category:shell]] | + | [[category:ops]] [[category:shell]] |
2018年8月24日 (五) 10:02的版本
在我们写 shell 脚本的时候,特别在调试的时候经常需要注释多行命令,但在每一行前输入 # ,显得有些麻烦。
基于 shell 命令的灵活性,我们可以使用下面的方法:
方法一(这是比较稳妥的作法):可以采用 HERE DOCUMENT 特性,实现多行注释
<<'COMMENT' ... COMMENT 举例如下: #!/bin/bash echo "Say Something" <<COMMENT your comment 1 comment 2 blah COMMENT echo "Do something else"
方法二 ,直接采用 :
这个命令的特殊作用,但这种做法有很多局限性,而且会影响性能,下面会介绍它的原理及性能分析。 如下是最简单的使用方法: : ' COMMENT1 COMMENT2 ' 即 : + 空格 + 单引号。 解释如下: 首先要知道 : 在 shell 中的特殊作用,它是内置的命令,先看一下它的帮助说明: $ help : :: : Null command. No effect; the command does nothing. Exit Status: Always succeeds. 即,: 它也是一个命令,既然是命令就会可以给它传参数,但因它会过滤掉这些参数,而单引号括起来的是普通的代码部分表示字符串,所以我们刚好可将来用来代表注释,表示在 : 后的 单引号括起来的部分在程序执行的时候忽略。 另外如果不好理解,直接把它当作汇编中的 NOP, python 中的 pass ,它只是一个占位,每次返回都是真,即 $? 的话,结果会是 0 。 如此一来,此方法是不是很绝妙? 但事实上里面潜藏着很多问题: 它不会注释 shell 脚本中本身带有单引号的语句部分,除非你将程序中的单引号全部换成又引号,这样不爽。 还是就是,虽然 : 会忽视后面的参数,但其实参数部分还是可能会被执行些操作,比如替换操作,文件截取操作等。所以这样会影响到代码的执行效率。 例如: : > file 会截取 file 。 : $(dangerous command) 这个替换操作照样会执行。 所以第二种方法,只能临时用用。
第三种方法,即:采用 : + << 'COMMENT' 的方式
#!/bin/bash echo "Say Something" : <<'COMMENT' your comment 1 comment 2 blah COMMENT echo "Do something else" 注意:要加上单引号部分,有时候虽然不加不会有什么问题,但还是要加,以防出现莫名其妙的意外发生,比如发生字符扩展,命令替换等。 但最保险的方法还是每行前加上 #