在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