是否有一种简单的方法来注释掉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>

可以将注释代码放在函数中。这样做的一个好处是,您可以通过在定义之后调用函数来“取消注释”。

除非您打算通过调用函数来“取消注释”,否则函数内的文本不必在语法上正确。

ignored() {
  echo this is  comment
  echo another line of comment
}

许多GUI编辑器允许您选择一个文本块,然后按“{”自动在所选代码块周围加上花括号。

你可以使用:

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"

在上面的例子中。