这个项目能做什么

ShellCheck是用于bash/sh脚本的静态分析工具,采用GNU GPLv3协议发布。它扫描脚本并报告警告和建议,而非执行脚本。 其目标包括澄清初学者因语法问题产生的难以理解的shell错误,中间级别的语义问题导致shell行为不符合直觉,以及可能在后期破坏正常脚本的细微注意事项或边界情况。 README文档记录了广泛的检测问题类别:引号问题(未引号变量、引号展开波浪号、变量中的字面引号、提前展开的陷阱),条件错误(常量测试表达式、缺失空格、=~中的引号正则表达式、不支持的[ ]运算符),常用命令误用(正则上下文中的通配符、重定向sudo、误用exec、隐式find优先级),初学者语法错误(赋值时=两侧的空格、逗号分隔数组、else if),风格建议(无用的cat、反引号与$()、重定向块),数据和类型错误(数组赋值给字符串、printf参数数量不匹配、子shell中的赋值),健壮性问题(灾难性rm、可能变为选项的通配符、find -exec shell注入),以及与shebang相关的可移植性警告,类似于checkbashisms。 使用选项包括在shellcheck.net上粘贴脚本,终端中运行`shellcheck yourscript`,编辑器集成(Vim通过ALE/Neomake/Syntastic,Emacs通过Flycheck/Flymake,Sublime通过SublimeLinter,Pulsar,VSCode,及其他编辑器的GCC错误兼容),以及通过退出码包含在构建或测试套件中,提供Makefile和Travis CI示例。README指出其在Travis CI、Codacy、Code Climate、Code Factor、CircleCI、GitHub Actions(仅限Linux)、Trunk Code Quality和CodeRabbit等服务中预安装,并建议锁定特定版本以避免意外构建中断。 输出格式包括带或不带ANSI颜色的人类可读文本、JSON、CheckStyle兼容XML和GCC兼容警告,项目wiki中有集成文档。 安装通过许多包管理器完成(Cabal、Stack、apt、pacman、emerge、yum、dnf、pkg、Homebrew、MacPorts、zypper、eopkg、Chocolatey、winget、scoop、conda-forge、Snap、Nix、Flox),Docker镜像(koalaman/shellcheck和shellcheck-alpine),Linux x86_64/armv6hf/aarch64、macOS aarch64/x86_64和Windows x86的预编译二进制文件,以及预提交钩子配置。从源代码构建需要Haskell和Cabal,编译需约2GB内存,测试通过`cabal test`运行。 可通过环境变量、命令行、文件内单独或全局忽略问题。贡献通过GitHub拉取请求接受,遵循GPLv3,README指向wiki以获取每个警告代码的长格式描述,并指向shfmt进行格式化,ShellCheck故意不强制执行。