我想知道是否有办法在shell脚本中注释掉一组行。 我怎么能这样做?我们可以在其他编程语言中使用/ * * /。 当我转换/使用/修改另一个脚本时,这非常有用 我想保留原始行而不是删除。
为所有未使用的行找到#和#前缀似乎是一项繁琐的工作。
让我们说在脚本中有100行不会被使用的后续行。 我想一次性评论它们。这可能吗?
答案 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
'
的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"
答案 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