shellcheck在vscode中默认不工作,因缺少语言识别、本地二进制路径或shell模式声明;需配置files.associations、shellcheck.shell和shellcheck.executablepath三者缺一不可。

shellcheck 插件在 VSCode 里默认不工作,不是插件坏了,而是它根本没被正确“唤醒”——缺语言识别、缺本地二进制、缺 shell 模式声明,三者任一缺失都会导致报错静默、波浪线不出现、悬停无提示。
为什么 shellcheck 完全没反应?
最常见原因不是插件没装,而是 VSCode 根本没把你的文件当 Shell 脚本处理:
- 右下角显示 Plain Text → 说明 language ID 未绑定,
shellcheck不会启动 - 已装插件但提示
ShellCheck not found→ 本地shellcheck命令未安装或不在 VSCode 终端的$PATH中 - 脚本有
#!/bin/bash却仍被标 SC2034(未使用变量)→ 插件按 POSIX 模式检查,没读到 shebang 或配置未生效
files.associations 必须手动加,不能靠后缀猜
VSCode 不根据 .sh 后缀自动设 language ID,必须显式声明:
- 打开
settings.json(Ctrl+, → 右上角 {} 图标) - 加入:
"files.associations": {"*.sh": "shellscript"} - 若脚本名是
deploy、build等无后缀,也得单独加:"deploy": "shellscript" - 别信“装了 Shell Format 就能高亮”——它只格式化,不改 language ID
shellcheck.shell 不设等于白配
默认 shellcheck 按 POSIX sh 解析,local、[[、$PWD 全被标红。必须强制指定目标 shell:
- 在
settings.json中加:"shellcheck.shell": "bash" - 同时确保脚本首行是
#!/usr/bin/env bash(比#!/bin/bash更兼容) - 如果仍误报 SC2155(未声明局部变量),检查是否保存了文件——未保存时 shebang 可能未被读取
- 别用
"shellcheck.exclude": ["SC2034"]全局屏蔽——这会掩盖真实问题,比如漏写export
本地 shellcheck 二进制路径最容易被忽略
VSCode 的 shellcheck 插件只是个壳,真干活的是你系统里的 shellcheck 命令:
- 终端运行
which shellcheck,拿到绝对路径(如/opt/homebrew/bin/shellcheck) - 在
settings.json中明确写:"shellcheck.executablePath": "/opt/homebrew/bin/shellcheck" - 不填这个字段,插件可能 fallback 到找不到的位置,且不报错——静默失效
- macOS 用户注意:VSCode 集成终端有时不继承
~/.zshrc中的 PATH,可改用Terminal > New Terminal验证是否真能执行shellcheck --version
shellcheck.shell、本地二进制路径,少一个,shellcheck 就只是个图标。











