在shell脚本中注释掉一组行

时间:2009-09-18 12:50:42

标签: unix shell comments editing

我想知道是否有办法在shell脚本中注释掉一组行。 我怎么能这样做?我们可以在其他编程语言中使用/ * * /。 当我转换/使用/修改另一个脚本时,这非常有用 我想保留原始行而不是删除。

为所有未使用的行找到#和#前缀似乎是一项繁琐的工作。

让我们说在脚本中有100行不会被使用的后续行。 我想一次性评论它们。这可能吗?

10 个答案:

答案 0 :(得分:46)

if false
then

...code...

fi

false总是返回false,所以这总是会跳过代码。

答案 1 :(得分:44)

最通用和最安全的方法是将评论置于引用的空白中 here-document,就像这样:

<<"COMMENT"
    This long comment text includes ${parameter:=expansion}
    `command substitution` and $((arithmetic++ + --expansion)).
COMMENT

为防止参数,必须引用上面的COMMENT分隔符 扩展,命令替换和算术扩展,这将发生 否则,作为Bash手册states和POSIX shell标准specifies

在上述情况中,不引用COMMENT会导致变量parameter 正在分配文本expansion,如果它是空的或未设置,则执行命令 command substitution,递增变量arithmetic并递减 变量expansion

将其他解决方案与此进行比较:

使用if false; then comment text fi需要评论文字 语法正确的Bash代码,而自然评论通常不是,如果 仅适用于可能的不平衡撇号。 : || { comment text }也是如此 构造

将注释放入单引号的void命令参数中,如:'comment text'中所述,其缺点是无法包含撇号。双引号 参数,如在:"comment text"中,仍然受参数扩展的影响, 命令替换和算术扩展,与未引用相同 这里 - 文件内容,可能导致上述副作用。

使用脚本和编辑器工具自动为每行中的前缀添加前缀 阻止'#'有一些优点,但并没有完全回答这个问题。

答案 2 :(得分:26)

您还可以使用以下方式添加多行注释:

: '
comment1comment1
comment2comment2
comment3comment3
comment4comment4
'

根据Bourne Shell builtins

的Bash参考
  

:(冒号)

     

:[参数]

     

除了扩展参数和执行重定向之外什么都不做。返回状态为零。

感谢Ikram在帖子Shell script put multiple line comment

中指出这一点

答案 3 :(得分:20)

您可以使用“here”文档而不使用命令将其发送到。

#!/bin/bash
echo "Say Something"
<<COMMENT1
    your comment 1
    comment 2
    blah
COMMENT1
echo "Do something else"

Wikipedia Reference

答案 4 :(得分:9)

文本编辑器具有一项称为搜索和替换的惊人功能。你没有说你使用的编辑器,但由于shell脚本往往是* nix,我使用VI,这里是命令来评论某些shell脚本的第20到50行:

:20,50s/^/#/

答案 5 :(得分:5)

: || {
your code here
your code here
your code here
your code here
}

答案 6 :(得分:2)

如果只是将代码包装成函数怎么办?

所以这个:

cd ~/documents
mkdir test
echo "useless script" > about.txt

成为这个:

CommentedOutBlock() {
  cd ~/documents
  mkdir test
  echo "useless script" > about.txt
}

答案 7 :(得分:1)

根据site

#!/bin/bash
foo=bar
: '
This is a test comment
Author foo bar
Released under GNU 
'

echo "Init..."
# rest of script

答案 8 :(得分:0)

根据您正在使用的编辑器,有一些快捷方式可以对一行内容进行注释。

另一种解决方法是将代码放在“if(0)”条件块中;)

答案 9 :(得分:-1)

此Perl单行注释文件orig.sh的第1行至第3行(第一行编号为0),并将注释版本写入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