用 Rust 编写、可嵌入的 JavaScript 引擎,包含词法分析、语法解析与解释器。
mvdan/sh
一个 Go 语言的 shell 解析、格式化与解释器库,附带 shfmt 格式化工具,支持 Bash、Zsh 等。
- Star
- 9,182
- Fork
- 465
- 未关闭 Issue
- 78
- 最近提交
- 4天前
这是什么?
mvdan/sh 是一个用纯 Go 编写的 shell 解析器、格式化工具和解释器,支持 POSIX Shell、Bash、Zsh 和 mksh 语法。它可以把脚本解析为语法树,便于检查或以程序方式改写。
项目附带命令行格式化工具 shfmt,可按统一风格格式化 shell 脚本,并支持原地写回文件。它已提供 Alpine、Debian、Fedora、Homebrew、Scoop、Docker、PyPI 等多种安装方式,VS Code、Emacs、Vim 等编辑器也有对应插件。
除格式化外,shell 包提供命令行拆分、变量与 ~ 展开、通配符匹配等辅助函数;interp 包可在 Go 程序中直接运行脚本,无需系统 shell,并支持 Windows。由于是纯 Go 实现,子 shell 使用 goroutine 模拟,而非真实进程。
核心功能
- 01将 POSIX、Bash、Zsh 和 mksh 脚本解析为语法树。
- 02通过 shfmt 命令行工具格式化脚本,支持原地修改文件。
- 03无需系统 shell 即可在 Go 中运行脚本,包括 Windows。
- 04提供命令行拆分、引用、变量展开和通配符匹配等辅助函数。
- 05提供 Docker 镜像,并已打包到多个操作系统的软件源中。
适用场景
- 在团队仓库中通过 CI 或 pre-commit 统一 shell 脚本风格。
- 开发需要以程序方式分析或改写 shell 脚本的 Go 工具。
- 在 Go 应用中嵌入可控权限的 shell 解释器。
- 借助现有插件在编辑器中格式化 shell 代码。
快速上手
- 1
使用 Go 安装 shfmt 命令行工具
go install mvdan.cc/sh/v3/cmd/shfmt@latest - 2
原地格式化 shell 脚本
shfmt -l -w script.sh
使用前须知
- 从源码安装需要 Go 1.26 或更高版本。
- 子 shell 在 goroutine 中运行,因此解释器无法使用真实的 PID 和文件描述符。
- 不支持 `$((` 与 `((` 的歧义语法。
收录于专题
标签
常见问题
- sh 是什么?
- 一个 Go 语言的 shell 解析、格式化与解释器库,附带 shfmt 格式化工具,支持 Bash、Zsh 等。 mvdan/sh 是一个用纯 Go 编写的 shell 解析器、格式化工具和解释器,支持 POSIX Shell、Bash、Zsh 和 mksh 语法。它可以把脚本解析为语法树,便于检查或以程序方式改写。
- sh 可以免费使用吗?用的什么许可证?
- sh 以 BSD-3-Clause 许可证开源。用于商业产品前,请先确认许可证条款。
- sh 还在维护吗?
- 活跃维护中。sh 最近一次提交是在 2026年11月3日。
- sh 适合用来做什么?
- 在团队仓库中通过 CI 或 pre-commit 统一 shell 脚本风格。 开发需要以程序方式分析或改写 shell 脚本的 Go 工具。 在 Go 应用中嵌入可控权限的 shell 解释器。 借助现有插件在编辑器中格式化 shell 代码。
- sh 怎么安装和运行?
- 使用 Go 安装 shfmt 命令行工具: go install mvdan.cc/sh/v3/cmd/shfmt@latest 原地格式化 shell 脚本: shfmt -l -w script.sh
- 在哪里获取 sh?
- 源代码和安装说明在 GitHub 上:https://github.com/mvdan/sh
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
7661+12 本周689RustMIT维护活跃更新于 7天前
一个符合 POSIX 标准的 bash 脚本,用于在用户和 shell 级别安装并切换多个 Node.js 版本。
9.6万+51 本周1.1万ShellMIT维护活跃更新于 3天前
Warp 是一款从终端演化而来的智能体开发环境,内置编码智能体,也可接入你自己的 CLI 智能体。
6.6万+107 本周5759RustAGPL-3.0更新于 16小时前
用 SQLite 替代 shell 历史记录,附带退出码、耗时等上下文,并可端到端加密同步到多台机器。
3.2万+77 本周1028RustMIT维护活跃更新于 昨天