shfmt

shfmt 格式化 shell 程序

shfmt --help

usage: shfmt [flags] [path ...]

shfmt 格式化 shell 程序。
如果唯一的参数是破折号('-')或没有给出参数,将使用标准输入。
如果给定路径是目录,则将使用在该目录下找到的所有 shell 脚本。

  --version  显示版本并退出

  -l,  --list      列出格式与 shfmt 不同的文件
  -w,  --write     将结果写入文件而不是标准输出
  -d,  --diff      格式不同时显示差异变化
  -s,  --simplify  简化代码
  -mn, --minify    缩小代码以减小其大小 (implies -s)

Parser options:

  -ln, --language-dialect str  bash/posix/mksh/bats, default "auto"
  -p,  --posix                 shorthand for -ln=posix
  --filename str               provide a name for the standard input file

Printer options:

  -i,  --indent uint       0 表示制表符(默认),>0 表示空格数
  -bn, --binary-next-line  像 && 和 | 这样的二进制操作可能另起一行
  -ci, --case-indent       缩进 case 语句
  -sr, --space-redirects   重定向运算符后跟一个空格
  -kp, --keep-padding      保持列对齐填充
  -fn, --func-next-line    函数左大括号放在单独的一行

Utilities:

  -f, --find   递归查找所有 shell 文件并打印路径
  --tojson     将语法树作为类型化的 JSON 打印到标准输出

For more information, see 'man shfmt' and https://github.com/mvdan/sh.

参考其他语言的规范,我选择了 4 个空格、重定向后留空格

shfmt -d -i 4 -sr main.sh

shellcheck