sh v3.13.1 Release Notes
Release Date: 2026-04-06 // 5 months ago-
cmd/shfmt
- Add support for
[[zsh]]in EditorConfig files - Detect the shell variant from filenames like
.zshrcand.bash_profile - Fix
--apply-ignorewhen used with explicit args - #1310
- Add support for
syntax
- Revert an accidental change to how array subscripts are formatted - #1314
- Never join
;;with the previous line when formatting - #1289 - Fix a bug where
$1[foo]was parsed as a subscript in Zsh - #1288 - Correctly parse
$!in double quotes in Zsh - #1298 - Allow indexing into special parameters in Zsh - #1299
- Allow parameter expansions with empty names in Zsh - #1280
interp
- Test against Bash 5.3 and fix three new discrepancies
- Fix a few bugs related to
namerefvariables - Avoid panics when user input encounters unimplemented features
๐ Consider becoming a sponsor if you benefit from the work that went into this release!
๐ง Binaries built on
go version go1.26.1 linux/amd64with:CGO_ENABLED=0 go build -trimpath -ldflags="-w -s"
Previous changes from v3.13.0
-
๐ This release introduces support for Zsh in the parser and formatter, which was tracked in issue #120 alongside the label zsh . While support is not complete, it should be far enough for many use cases.
๐ This release also drops support for Go 1.24 and includes many other enhancements:
cmd/shfmt
- Exit with a non-zero status when
-lprints any filenames shfmt -versionis now derived from the git current tag, dropping the-ldflagsworkaround
- Exit with a non-zero status when
syntax
- New nodes types and node fields are introduced alongside
LangZsh LangVariantis now a bitset, allowing the use of sets like "Bash-like"- Add
InteractiveSeqandStmtsSeqiterator methods forParser - Stop exposing the internal buffer in
Printervia struct embedding - Support the use of brace expansions like
declare {a,b}_c=value - Fix a bug where POSIX and Bash incorrectly allowed empty command lists
- New nodes types and node fields are introduced alongside
interp
- Add support for
shopt -s dotglobandshopt -s extglob - Add support for simple uses of
!(expr)extended glob patterns - Support more builtin flags for
declare,type,read - Fix various bugs relating to nulls, errors, and arrays
- Add support for
expand
- Add
Config.DotGlobandConfig.ExtGlobfor the interpreter - Add
Variable.Flagsto get the one-characterdeclareflags - Do not force env vars on Windows to be uppercase
- Fix various bugs relating to glob pattern matching
- Add
pattern
- Add
GlobLeadingDotandExtendedOperatorsfor the interpreter - Add
NegExtGlobErrorto mark the use of!(expr)negation patterns
- Add
๐ Consider becoming a sponsor if you benefit from the work that went into this release!
๐ง Binaries built on
go version go1.26.1 linux/amd64with:CGO_ENABLED=0 go build -trimpath -ldflags="-w -s"๐ Note that this release no longer includes a
sha256sums.txtasset; GitHub now provide digests natively.