在shell脚本中注释掉一组行

Vij*_*jay 50 unix shell comments editing

我想知道是否有办法在shell脚本中注释掉一组行.我怎么能这样做?我们可以在其他编程语言中使用/**/.当我转换/使用/修改另一个脚本并且我想保留原始行而不是删除时,这是最有用的.

对于未使用的所有行,查找和前缀#似乎是一项繁琐的工作.

可以说脚本中有100行代表不使用的行.我想一次性评论它们.那可能吗?

Art*_*ius 46

if false
then

...code...

fi
Run Code Online (Sandbox Code Playgroud)

false 总是返回false,所以这将总是跳过代码.

  • :/这当然不是最好的答案,IMO. (5认同)
  • bash不是预处理语言...当在C中用作预处理器命令时,这个技巧很有用.如果按照建议执行此操作,则无法避免可能的语法错误. (3认同)
  • 我实际上不介意被"禁用"的代码中的语法错误. (3认同)
  • 最佳答案如下,@ asev69 (2认同)

spb*_*ick 45

最通用和最安全的方法是将注释放入引用的空白中 here-document,如下所示:

<<"COMMENT"
    This long comment text includes ${parameter:=expansion}
    `command substitution` and $((arithmetic++ + --expansion)).
COMMENT
Run Code Online (Sandbox Code Playgroud)

引用COMMENT上面的分隔符是必要的,以防止参数扩展,命令替换和算术扩展,否则会发生,如Bash手动状态和POSIX shell标准所指定的那样.

在上面的例子中,没有引用COMMENT会导致变量parameter 被赋值文本expansion,如果它是空的或未设置,执行命令 command substitution,递增变量arithmetic和递减变量expansion.

比较其他解决方案:

使用if false; then comment text fi要求注释文本在语法上是正确的Bash代码,而自然注释通常不是,如果仅用于可能的不平衡撇号.这同样适用于: || { comment text } 结构.

将注释放入单引号的void命令参数中,如下所示:'comment text',其缺点是无法包含撇号.双引号参数:"comment text"仍然受参数扩展,命令替换和算术扩展的影响,与未引用的here-document内容相同,可能导致上述副作用.

使用脚本和编辑器工具自动为带有'#'的块中的每一行添加前缀有一些优点,但并不能完全回答这个问题.


小智 27

您还可以使用以下方式添加多行注释:

: '
comment1comment1
comment2comment2
comment3comment3
comment4comment4
'
Run Code Online (Sandbox Code Playgroud)

根据Bourne Shell内置的Bash参考

:(冒号)

:[参数]

除了扩展参数和执行重定向之外什么都不做.返回状态为零.

感谢Ikram在Shell脚本中指出了这一点,并提出了多行评论

  • 虽然注释行中有单引号但不起作用... (4认同)

Bug*_*ill 20

您可以使用"here"文档而不使用命令将其发送到.

#!/bin/bash
echo "Say Something"
<<COMMENT1
    your comment 1
    comment 2
    blah
COMMENT1
echo "Do something else"
Run Code Online (Sandbox Code Playgroud)

维基百科参考

  • 本文未引用的内容仍会进行参数扩展,命令替换和算术扩展,因此可能会产生副作用,例如将反引号中的文本作为命令执行。 (2认同)

kdg*_*ory 9

文本编辑器具有称为搜索和替换的惊人功能.你没有说你使用的编辑器,但由于shell脚本往往是*nix,我使用VI,这里是命令来评论某些shell脚本的第20到50行:

:20,50s/^/#/
Run Code Online (Sandbox Code Playgroud)

  • 我就是这样做的.要取消注释,请尝试以下:: 20,50s/^#// (2认同)

小智 5

: || {
your code here
your code here
your code here
your code here
}
Run Code Online (Sandbox Code Playgroud)