UNIX-在Shell脚本中注释掉一组行
我想知道是否有办法在shell脚本中注释掉一组行。我该怎么办? 我们可以在其他编程语言中使用/ * * /。这在我转换/使用/修改另一个脚本时最有用我想保留原始行而不是删除。
对于所有未使用的行,查找并添加#前缀似乎很麻烦。
可以说脚本中有100行,因此不需要使用这些行。我想一口气评论他们。 那可能吗?
10个解决方案
46 votes
if false
then
...code...
fi
false始终返回false,因此将始终跳过代码。
Artelius answered 2020-01-27T09:51:51Z
45 votes
最通用,最安全的方法是将评论置于引号中:'comment
text',像这样:
<
This long comment text includes ${parameter:=expansion}
`command substitution` and $((arithmetic++ + --expansion)).
COMMENT
引用上面的:'comment
text'定界符对于防止参数很有必要扩展,命令替换和算术扩展否则,如Bash手册所述和POSIX Shell标准所指定。
在上述情况下,不引用:'comment
text'将导致变量:"comment text"被分配文本expansion,如果为空或未设置,则执行命令command substitution,递增变量arithmetic和递减变量expansion。
比较其他解决方案:
使用:'comment
text'需要注释文本为语法上正确的Bash代码,而自然注释通常不是仅用于可能的不平衡撇号。 :"comment text"也是如此构造。
就像:'comment
text'中那样,将注释放入单引号的void命令自变量中具有无法包含撇号的缺点。 双引号自变量,例如:"comment text"中的参数,仍需进行参数扩展,命令替换和算术扩展,与未引用的相同本文档内容可能会导致上述副作用。
使用脚本和编辑器工具来自动为每个行添加前缀带“#”的块有一些优点,但不能完全回答问题。
spbnick answered 2020-01-27T09:52:39Z
26 votes
您还可以使用以下方法添加多行注释:
: '
comment1comment1
comment2comment2
comment3comment3
comment4comment4
'
根据Bourne Shell内置参考
:(冒号)
:[参数]
除了扩展参数和执行重定向之外,什么也不要做。 返回状态为零。
感谢Ikram在后的Shell脚本中指出多行注释这一点
asev69 answered 2020-01-27T09:53:21Z
20 votes
您可以使用没有命令的“此处”文档来发送文档。
#!/bin/bash
echo "Say Something"
<
your comment 1
comment 2
blah
COMMENT1
echo "Do something else"
维基百科参考
Buggabill answered 2020-01-27T09:53:45Z
9 votes
文本编辑器具有一个惊人的功能,称为搜索和替换。 您没有说使用什么编辑器,但是由于shell脚本通常是* nix,而我使用的是VI,因此以下命令注释了一些shell脚本的第20至50行:
:20,50s/^/#/
kdgregory answered 2020-01-27T09:54:06Z
5 votes
: || {
your code here
your code here
your code here
your code here
}
jj_5698 answered 2020-01-27T09:54:21Z
2 votes
如果只是将代码包装成函数怎么办?
所以这:
cd ~/documents
mkdir test
echo "useless script" > about.txt
变成这个:
CommentedOutBlock() {
cd ~/documents
mkdir test
echo "useless script" > about.txt
}
Buksy answered 2020-01-27T09:54:49Z
1 votes
根据此网站:
#!/bin/bash
foo=bar
: '
This is a test comment
Author foo bar
Released under GNU
'
echo "Init..."
# rest of script
user2763554 answered 2020-01-27T09:55:09Z
0 votes
根据您所使用的编辑器,有一些注释一行行的快捷方式。
另一个解决方法是将您的代码放在“ if(0)”条件块中;)
Carlos Tasada answered 2020-01-27T09:55:34Z
-1 votes
该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
ire_and_curses answered 2020-01-27T09:56:07Z