脚本里最终用上了三种多行注释办法,能满足几乎所有场景:

下面把这事儿摊开说清楚点儿,让你能马上上手。简单来说,常用的三种办法分别是:每行都用 #,用 Here Document(多半是 :<<'TAG' 这种),再就是用 : 命令配合多行引号(: ' … ')。每种都有场景和坑,知道怎么选就省心。
先说最直白的那一套:逐行用 #。这玩意儿谁都懂。每行前面加个井号,解释、屏蔽代码都行。兼容性最好,任何 sh、bash、dash 都认。这种适合注释短段、每行独立的情况,或者你想在代码审查里让别人一眼看清楚。缺点也很明显:要屏蔽许多行就得一行行打 #,编辑起来费劲,复制粘贴后常常得处理每行前缀,比较烦。

举个例子,就是这样用:
# 第一行注释
# 第二行注释
# 第三行注释
这法子就是最稳妥的,没什么玄学,团队里也最通用。
再来说常用的第二种:Here Document 配合 :(常见写法 :<<'COMMENT')。这招适合一次性把一大坨文字吞掉,不会执行也不会展开。重点细节有几条要盯着:结束标识符 COMMENT 必须独占一行,行前不能有多余空格;如果你想在注释里用到 $、`、$(…) 这些看着像变量或命令替换的符号,记得把结束标识符用单引号包起来,这样内容里的 $HOME、$(date) 就只是纯文本,不会被 shell 展开或执行。
例子长这样:
:<<'COMMENT'
这是块注释的内容。
变量不会被展开,命令也不会执行,列如 $HOME、$(ls) 都只是文字。
COMMENT
再给你两点实战经验:许多人复制粘贴时忘了把结束标识符单独放一行,或者前面多了个空格,结果脚本一直卡着找不到结束符,脚本像被挂住似的抓狂。还有一个变体是用 <
第三种方法更简洁:用 : 命令配合多行引号,这玩意儿就是把一大坨文本当参数传给一个空操作命令,写法像下面这样:
: '
这也是一段多行注释。
单引号内的内容不会被变量或命令替换。
'
好处是写法干净,不需要显式的结束标识符。要注意的是,单引号里的内容不能再包含单引号本身,否则就得绕路或者用其他写法。这个方法最适合短到中等长度、并且注释里不需要单引号的场景。
把这三种法儿放一块儿看,你就能在日常写脚本时灵活选用:要是注释几行,直接 #;要是要屏蔽一大块、里面有 $ 和 ` 的字样,就用 :<<'TAG';要是想写得干净利落、注释里没单引号,就用 : ' … '。别死板一套不放。
再说点容易踩的坑,提醒你别被坑:当你要注释掉一段本身包含 here-document 的代码时,普通的 # 会很麻烦,由于那段代码里可能有自己的结束标识符;这时用 :<<'COMMENT' 把整块吞了更直观。还有一点,heredoc 的结束标识符对缩进相当敏感,尤其是团队里大家格式不统一时,常常有人在结束符前误加空格,结果脚本一直等着,开发环境看似卡死。还有如果你不把标识符加引号,注释里的 $VAR 会被解析成环境变量,这个行为有时会带来奇怪的副作用。
给你个实际写法的例子,把几种方式混合用在脚本里更好理解:
#!/bin/sh
# 这是脚本头,用 # 注释说明用途
:<<'BLOCK'
下面是一段临时禁用的测试代码,
包含变量和命令替换,如 $USER、$(date) ,不用担心被执行。
BLOCK
echo “脚本继续运行”
这里面你可以看到:脚本头用 # 说明用途,接着用 :<<'BLOCK' 把整块测试代码吞掉,最后脚本正常继续运行。这种套路在排查或临时屏蔽功能时很常见,改起来也方便。
还有些细节值得注意:如果注释里需要引用单引号,那 : ' … ' 就不太好使;碰到这种情况,要么用 :<<'TAG',要么把单引号换成别的表明法。另一个小招是团队约定,如果大家都熟悉 heredoc 注释,用这种方式可以一口气把大段解释或者范例放在脚本里,便于维护;但如果团队里有新人,最好在代码前写一句简单说明,让人一眼知道这是块注释而不是要执行的代码。
在做代码审查的时候,# 注释的可读性最好,人一眼就知道是注释;而 heredoc 注释如果没注明结束标识符的含义,有时会让人摸不着头脑。所以在团队协作时,形成统一规范比单纯选哪种注释更重大。写脚本久了,你会发现这些小习惯能省不少调试时间,就像磨刀不误砍柴工。
最后再提醒两点实操感受:当你在函数里想保持注释缩进美丽,试试 <




















暂无评论内容