Shell 脚本格式化
Shell 里空白是有语义的,所以这里只重排每行开头的缩进,行内的内容一个字符都不动。引号里、here-doc 里的东西原样保留。
顺带提醒几个 Shell 的坑
- 变量引用永远加双引号。
rm -rf $dir/在$dir为空时会变成rm -rf /,写成"$dir"就只是报个错。这是 Shell 最著名的事故来源。 - 脚本开头写
set -euo pipefail。出错就停、用未定义变量就停、管道中间失败也算失败。默认行为是出了错继续往下跑,非常危险。 [[ ]]比[ ]好用,支持&&、正则匹配,且不做分词。但它是 bash 扩展,#!/bin/sh的脚本里不能用。- here-doc 的结束标记必须顶格(除非用
<<-,那样可以用 Tab 缩进,注意只能是 Tab 不能是空格)。本工具不会去动 here-doc 里的任何一行,包括结束标记。 - 想做真正的静态检查用 ShellCheck,那是另一个量级的工具。这里只管缩进。
- 相关:Linux 常用命令、PHP 格式化、Cron 表达式、Chmod 计算、代码转图片。