Shell 脚本格式化
格式化所有处理都在浏览器本地完成,数据不上传服务器
把一段没有缩进的 Shell 脚本排整齐:if / fi、for / done、while / do、case / esac、函数体与子 shell 都会按层级对齐,case 的分支标签比 case 深一级、;; 回到分支层级。这个工具给自己划的界线是「只改每行开头的空白」—— 行内的一个字符都不碰。Shell 不是可以随便重排的语言:`<<EOF` 之后的内容逐字是数据,多一个空格就改了它;续行与引号里的换行都依赖原来的位置。代价是它不会把 `if [ x ]; then echo ok; fi` 展开成三行,但也不会把你的脚本弄坏。
功能
- 按结构缩进:if / for / while / case / 函数体 / 子 shell
- case 分支单独处理:分支标签深一级,;; 回到分支层级
- 只改行首空白,行内一个字符都不动
- heredoc(<<EOF)之间逐字保留 —— 缩进会改变那里的数据
- 跨行字符串内部不动,注释里的引号也不会被误当成字符串开始
- 收尾词后跟重定向(done < file)也能正确对齐
- 缩进宽度可选 2 或 4,可选去行尾空白、可选压空行
使用方法
- 把脚本粘进输入框
- 缩进实时整理好
- 按需要调整缩进宽度与两个空白选项
- 复制结果
常见问题
- 为什么不提供「压缩」功能?
- 因为在 Shell 里那是个陷阱。注释可能落在 heredoc 里(那时它是数据,去掉就改了内容),行尾没有换行的脚本被压成一行会直接改变意思,`&&` 与管道的换行位置也不是随便能动的。多数脚本确实压不坏,但坏掉的那部分不会报错、只会在运行时表现怪异 —— 所以这个工具不做它。
- heredoc 为什么原样保留?
- 因为 `<<EOF` 到 `EOF` 之间的每一行都是被写入的数据,那里的缩进是内容的一部分。给它加缩进,就等于改了脚本输出的内容 —— 比如生成一份 YAML 或一段代码时,缩进错了整份文件就错了。`<<-` 形式允许前导制表符,但只允许制表符,这个区别也保留了。
- 会改变脚本的行为吗?
- 不会。工具只重写每行开头的空白,而且会先识别出 heredoc 与跨行字符串并跳过它们。行内内容(包括多余的空格、特殊字符、注释)都原样保留。
- 脚本会上传吗?
- 不会。格式化全在浏览器里完成,页面不发送任何请求 —— 部署脚本里常常有密钥与内部地址,它们不会离开这台设备。
相关工具
代码着色
网络把代码染上语法颜色,选中复制即可带颜色贴进 PPT 与 Word;也可以输出内联样式的 HTML 源码,直接放进博客或邮件。支持 26 种语言。
JS 美化与压缩
格式化在线 JS 压缩与美化:压缩去掉注释与空白(保留 /*! 许可声明),美化按大括号与分号缩进排版。字符串与模板字符串内容原样保留,文件不上传。
SQL 格式化
格式化在线 SQL 格式化:关键字统一大小写、按 SELECT / FROM / WHERE 等子句换行缩进、子查询逐层展开,压缩模式去掉多余空白与注释。语句不上传服务器。
JSON 格式化
格式化在线 JSON 格式化与校验工具:树形折叠浏览、搜索键值、逐节点改值与删除、语法错误定位到具体行列,输入框带行号与高亮。全部在浏览器本地完成。
JSON 转代码
格式化把 JSON 样本转成 TypeScript interface、Go struct、Java class 或 Rust struct:不齐的键标成可选、类型冲突退化为联合类型。全程在浏览器本地生成。
JSON5 转换
格式化把 JSON5 解析成标准 JSON:注释、无引号键、单引号、尾逗号、十六进制、Infinity 都支持,错误指出行列。全部在浏览器本地完成。