是否有一种简单的方法来注释掉shell脚本中的代码块?
在bash中:
#!/bin/bash
echo before comment
: <<'END'
bla bla
blurfl
END
echo after comment
END分隔符周围的“和”很重要,否则块内的内容(例如$(命令))将被解析并执行。
关于解释,请看这个和这个问题。
shell脚本上没有块注释。
使用vi(是的,vi),您可以轻松地从第n行注释到第m行
<ESC>
:10,100s/^/#/
(从第10行到第100行,用#符号代替第(^)行。)
联合国的评论是
<ESC>
:10,100s/^#//
(从第10行到第100行,替换行开始(^),后面跟着#,并注明//。)
Vi几乎在任何有/bin/sh的地方都是通用的。
在一个:
去你想评论的第一行 shift-V(进入可视模式),向上向下突出块中的行 执行以下选择:s/^/#/ 命令如下所示: : <、>年代/ ^ / # 回车
e.g.
shift-V
jjj
:s/^/#
<enter>
你可以使用:
if [ 1 -eq 0 ]; then
echo "The code that you want commented out goes here."
echo "This echo statement will not be called."
fi
以下命令适用于sh、bash、ksh和zsh。
注释的代码块可以放在BEGINCOMMENT和ENDCOMMENT中:
[ -z $BASH ] || shopt -s expand_aliases
alias BEGINCOMMENT="if [ ]; then"
alias ENDCOMMENT="fi"
BEGINCOMMENT
echo "This line appears in a commented block"
echo "And this one too!"
ENDCOMMENT
echo "This is outside the commented block"
执行上述代码将导致:
This is outside the commented block
例如,为了取消注释所注释的代码块
alias BEGINCOMMENT="if : ; then"
而不是
alias BEGINCOMMENT="if [ ]; then"
在上面的例子中。
你可以使用Vi/Vim的可视块模式,它是为这样的东西设计的:
Ctrl-V
Highlight first element in rows you want commented
Shift-i
#
esc
不加评论的是:
Ctrl-V
Highlight #'s
d
l
这是vi做这类事情的交互式方式,而不是计算或读取行号。
最后,在Gvim中使用ctrl-q进入Visual Block模式,而不是ctrl-v(因为这是粘贴的快捷键)。
sunny256给出的已接受的答案中的here-doc技巧的一个变体是使用Perl关键字进行注释。如果您的注释实际上是某种文档,那么您可以开始在注释块中使用Perl语法,这允许您将其打印出来,将其转换为手册页,等等。
就shell而言,你只需要将'END'替换为'=cut'。
echo "before comment"
: <<'=cut'
=pod
=head1 NAME
podtest.sh - Example shell script with embedded POD documentation
etc.
=cut
echo "after comment"
(参见“在shell脚本中嵌入文档”)
老实说,为什么要这么过度设计……
我认为编写主动代码来生成被动代码是一种糟糕的做法。
我的解决方案是:大多数编辑器都有块选择模式。只需使用它添加#到所有你想注释掉的行。 有什么大不了的…
记事本的例子:
创建方法:Alt -鼠标向下拖动,按#。
删除:alt -鼠标向下拖动,右移箭头,删除。
另一种模式是: 如果你的编辑器没有BLOCK评论选项,
打开编辑器的第二个实例(例如File=>New File…) 从您正在处理的上一个文件中,只选择要注释的部分 复制并粘贴到新的临时文件的窗口中… 打开编辑菜单,选择REPLACE,输入要替换的字符串'\n' 输入替换字符串:'\n#' 按下“替换全部”按钮
DONE
它适用于任何编辑器
我喜欢单线开闭:
if [ ]; then ##
...
...
fi; ##
“##”可以帮助我轻松地找到块注释的开始和结束。我可以在“##”后面加上一个数字,如果我有很多的话。要关闭注释,我只需在“[]”中插入一个“1”。我还避免了在注释块中使用单引号时遇到的一些问题。
可以将注释代码放在函数中。这样做的一个好处是,您可以通过在定义之后调用函数来“取消注释”。
除非您打算通过调用函数来“取消注释”,否则函数内的文本不必在语法上正确。
ignored() {
echo this is comment
echo another line of comment
}
许多GUI编辑器允许您选择一个文本块,然后按“{”自动在所选代码块周围加上花括号。
让我们把这些最好的想法和建议结合起来。
alias _CommentBegin_=": <<'_CommentEnd_'"
如前所述,单引号是非常重要的,因为没有它们 $(commandName)和${varName}将被计算。
你可以这样使用它:
_CommentBegin_
echo "bash code"
or
none code can be in here
_CommentEnd_
别名使使用更加明显和更好看。
推荐文章
- 如何从查找“类型d”中排除此/ current / dot文件夹
- 只使用md5sum获取哈希值(没有文件名)
- 使用sh shell比较字符串
- 在Bash中测试非零长度字符串:[-n "$var"]或["$var"]
- 如何创建Bash别名?
- 如何设置ssh超时时间?
- 将所有变量从一个shell脚本传递到另一个?
- 只列出UNIX中的目录
- 如何删除shell脚本中文件名的扩展名?
- 'find -exec'是Linux中的shell函数
- 临时更改bash中的当前工作目录以运行命令
- 重定向复制的标准输出到日志文件从bash脚本本身
- Shell脚本for循环语法
- Docker入口点运行bash脚本被“拒绝权限”
- Chmod递归