【问题标题】:How to comment out particular lines in a shell script如何注释掉 shell 脚本中的特定行
【发布时间】:2013-08-23 15:38:22
【问题描述】:

谁能建议如何在 shell 脚本中注释除# 之外的特定行?

假设我想评论五行。除了在每一行添加#,还有其他方法可以注释这五行吗?

【问题讨论】:

  • 不幸的是不在 sh、Bash 和 Perl 中。
  • 没有。评论可以用领先的#来完成。没有多行cmets(如php中的/* ... */)。
  • 顺便说一句,它们被称为“block cmets”

标签: shell unix sh


【解决方案1】:

您可以使用条件注释脚本的部分。

例如以下脚本:

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。)

【讨论】:

    【解决方案2】:

    是的(虽然这是一个 讨厌的 hack)。您可以这样使用heredoc

    #!/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 之间包含的所有代码并将它们提供给 echoecho 不会从标准输入读取,所以它们都会被丢弃)。

    请注意,您可以在heredoc 中添加任何内容。它不必是有效的 shell 代码(即不必正确解析)。

    这很讨厌,我只提供它作为一个兴趣点。你不能做相当于C的/* ... */

    【讨论】:

    • 你可能想使用echo以外的东西,或者将回显发送到/dev/null。
    • 是的。命令无关紧要。但是,我确实注意到在我的 Cygwin 终端上,该 echo 不读取标准输入。我怀疑实现不同
    • 不,它不会读取任何内容,但会输出一个空行。 true 可能会更好。
    • :,这可能比true 更有效(尽管实际上,两者都不会减慢您的脚本速度)。出于注释代码的目的,它可能更具可读性,因为它看起来不像它应该做任何事情。
    【解决方案3】:

    对于单行注释,在行首添加 #
    对于多行 cmets,从您要开始的位置添加 '(单引号)并在要结束注释行的位置添加 '(再次单引号)。

    【讨论】:

    • 尝试突出显示关键字并明确格式,这将有助于为其他人找到答案
    • 说真的这不是票数最高的答案吗?发生了什么事?
    【解决方案4】:

    您必须依赖 '#',但为了在 vi 中更轻松地完成任务,您可以执行以下操作(先按退出键):

    :10,20 s/^/#
    

    其中 10 和 20 是您要注释掉的行的开始和结束行号

    完成后撤消:

    :10,20 s/^#//
    

    【讨论】:

      猜你喜欢
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 2015-12-23
      • 2017-06-02
      • 2017-02-13
      • 2021-11-28
      • 2015-06-14
      相关资源
      最近更新 更多