在shell脚本中注释掉一组行
我想知道是否有办法在shell脚本中注释掉一组行。 我怎么能这样做? 我们可以在其他编程语言中使用/ * * /。 当我转换/使用/修改另一个脚本,这是最有用的,我想保留原来的行而不是删除。
为所有未使用的行find并加上前缀#似乎是一个麻烦的工作。
比方说,在脚本中有100行不在使用的后续行中。 我想一口气发表评论。 那可能吗?
if false then ...code... fi
false
总是返回false,所以这总是会跳过代码。
最通用和最安全的方法是将评论放入here-document
引用的空白here-document
,如下所示:
<<"COMMENT" This long comment text includes ${parameter:=expansion} `command substitution` and $((arithmetic++ + --expansion)). COMMENT
引用上面的COMMENT
分隔符是必要的,以防止参数扩展,命令replace和算术扩展,否则会发生,因为Bash手册状态和POSIX shell标准指定 。
在上述情况下,不引用COMMENT
会导致variablesparameter
被指定为文本expansion
,如果是空的或未设置,则执行command substitution
,增量variablesarithmetic
和递减variablesexpansion
。
比较其他解决scheme:
if false; then comment text fi
使用if false; then comment text fi
if false; then comment text fi
要求注释文本在语法上是正确的Bash代码,而自然注释往往不是,如果只是可能的不平衡撇号。 同样的: || { comment text }
: || { comment text }
构造。
将注释放入单引号void命令参数中,如:'comment text'
,其缺点是无法包含撇号。 双引号的参数,如:"comment text"
,仍然受到参数扩展,命令replace和算术扩展的限制,这与文档内容未加引用相同,可能导致上述副作用。
使用脚本和编辑器工具来自动在块中的每一行加上“#”有一些好处,但并不完全回答这个问题。
你也可以使用下面的多行注释:
: ' comment1comment1 comment2comment2 comment3comment3 comment4comment4 '
根据Bourne Shell buildins的Bash Reference
:(冒号)
:[参数]
除了扩展参数和执行redirect以外,什么都不要做。 返回状态为零。
感谢Ikram在后面的脚本中指出这一点, 把多行注释
你可以使用一个'here'文件而不用命令发送它。
#!/bin/bash echo "Say Something" <<COMMENT1 your comment 1 comment 2 blah COMMENT1 echo "Do something else"
维基百科参考
文本编辑器有一个惊人的function,称为search和replace。 你不会说你使用了什么编辑器,但是因为shell脚本是* nix,所以我使用了VI,下面是命令来注释一些shell脚本的第20到50行:
:20,50s/^/#/
: || { your code here your code here your code here your code here }
如果你只是把你的代码包装到函数中呢?
所以这:
cd ~/documents mkdir test echo "useless script" > about.txt
变成这样:
CommentedOutBlock() { cd ~/documents mkdir test echo "useless script" > about.txt }
根据您使用的编辑器,您可以使用一些快捷方式来评论一行代码块。
另一个解决方法是将您的代码放在“if(0)”条件块中;)
根据这个网站 :
#!/bin/bash foo=bar : ' This is a test comment Author foo bar Released under GNU ' echo "Init..." # rest of script
这个Perl单行程序将文件orig.sh
(第一行的编号为0)的第1行至第3行注释掉,并将注释的版本写入cmt.sh
perl -n -e '$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++' orig.sh > cmt.sh
显然,您可以根据需要更改边界号码。
如果你想编辑文件,它甚至更短:
perl -in -e '$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++' orig.sh
演示
$ cat orig.sh a b c d e f $ perl -n -e '$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++' orig.sh > cmt.sh $ cat cmt.sh a #b #c #d e f