如何注释掉 shell 脚本中的特定行

除了 #之外,有人能建议如何在 shell 脚本中注释特定的行吗?

假设我想注释五行。除了将 #添加到每一行之外,还有其他方法来注释这五行吗?

249216 次浏览

是的(虽然它是一个 恶心黑客)。你可以使用一个 Herdoc这样:

#!/bin/sh


# do valuable stuff here
touch /tmp/a


# now comment out all the stuff below up to the EOF
echo <<EOF
...
...
...
EOF

这是干什么?heredoc将以下所有输入提供到终止符(在本例中为 EOF)到指定的命令中。因此,您可以将要注释掉的代码包围起来

echo <<EOF
...
EOF

它将获取两个 EOF 之间包含的所有代码,并将它们提供给 echo(echo不从 stdin 读取,因此它将被丢弃)。

注意,使用上面的代码,您可以将任何内容放入 heredoc中。它不必是有效的 shell 代码(也就是说,它不必进行正确的解析)。

这是非常肮脏的,我提供它只是作为一个利益点。你不能做相当于 C 的 /* ... */

可以使用条件语句对脚本的注释部分进行注释。

例如,下面的脚本:

DEBUG=false
if ${DEBUG}; then
echo 1
echo 2
echo 3
echo 4
echo 5
fi
echo 6
echo 7

产出:

6
7

为了使代码段 无可奉告,您只需注释变量:

#DEBUG=false

(这样做将打印数字1到7。)

你必须依赖“ #”,但是为了使任务在 vi 中更容易执行,你可以执行以下操作(首先按转义键) :

:10,20 s/^/#

用10和20作为要注释掉的行的起始行号和结束行号

并在完成后撤销:

:10,20 s/^#//

对于单行注释,在行首添加 #
为多行注释添加 '(单引号)从您想要开始的地方,并添加 '(再次单引号)在您想要结束注释行的点。