shell批量注释

 人参与 | 时间:2026-10-17 07:27:21

写shell脚本最烦什么?量注不是语法报错,不是量注变量没引号,是量注调试时那几十行临时加的echo和sleep。删吧,量注心疼,量注万一待会儿还要用;不删吧,量注输出糊成一团。量注我见过最狠的量注同事,直接Ctrl+A全选,量注然后手动在每行前面敲#,量注敲了五分钟,量注中途还漏了两行,量注脚本跑起来跟抽风似的量注。

批量注释这事儿,量注真没那么玄乎。量注核心就一句话:让编辑器或命令行帮你把行首加上#,而不是你一个个去敲。Vim里是Ctrl+V进入可视块,方向键选中目标行,按I输入#再按Esc,完事儿。VS Code是Ctrl+/,一行注释,选中多行再按一次,全给你加上。这些是图形界面的玩法,但真正在服务器上干活,谁有空开个IDE?

命令行有更野的路子。用sed,一行搞定:sed -i 's/^/#/' script.sh。这命令把每行开头替换成#,-i直接改文件,不加就是预览。想只注释前20行?sed -i '1,20s/^/#/' script.sh。想恢复?把s/^/#/换成s/^#//就行。这法子适合那种临时加了一堆调试代码、最后要整体屏蔽的场景。

还有个偏方,用awk。比如awk '{ print "#"$0}' script.sh > temp && mv temp script.sh。说实话,awk处理这种纯行首插入的活儿有点大材小用,但如果你已经写了半个awk脚本,顺手加个print前缀也不费事。我自己的习惯是——能用sed绝不用awk,能用#注释绝不用if false包块。为啥?因为#注释是透明的,别人一看就知道你屏蔽了什么,而if false那玩意儿,代码结构还在,变量定义、函数声明还占着内存,容易出幺蛾子。

有个坑得提醒你。如果你脚本里有#!/bin/bash这种shebang行,注释掉它,脚本就废了——系统不知道拿什么解释器跑它。所以批量注释前,最好先看看第一行是不是shebang。还有,heredoc(<<EOF)里面的内容,行首加#没用,那是给cat、ssh这类命令吃的,不是给shell解析器吃的。我吃过一次亏,把整个部署脚本注释了,结果里面嵌套的<<EOF块没处理,执行时报语法错误,找半天才明白是heredoc没被屏蔽。

最后说个偷懒技巧。如果你用的是zsh,可以直接Ctrl+X再按#,它会把当前行整个注释掉。bash用户就别想了,老老实实Ctrl+A然后自己补个#吧。但说实话,最实用的还是记住sed -i 's/^/#/'这一个,配合git diff看改动,注释错了就git checkout恢复,比什么花活都稳。

反正我现在写脚本,调试代码都习惯性集中放在一段,用# === DEBUG ===标记,调试完直接一行sed全注释掉,留个标记下次还能快速找回来。这习惯救了我好几次——有一次线上出问题,我翻出半个月前注释掉的调试段,取消注释跑一遍,立马定位到是环境变量没传对。所以,批量注释不是懒,是给未来的自己留条后路。

顶: 52993踩: 34