envsubst is a Go package for expanding variables in a string using ${var} syntax,
with support for bash string replacement functions. It ships both a library and a
small CLI (cmd/envsubst).
This is a maintained fork of
drone/envsubst, which has been unmaintained since 2020. The fork keeps the package API stable while refreshing the Go toolchain, dependencies, and CI. Drop-in replacement for existing callers — only the import path changes.
go get github.com/cloudspinx/envsubstimport "github.com/cloudspinx/envsubst"
out, err := envsubst.EvalEnv("hello ${NAME:-world}")go install github.com/cloudspinx/envsubst/cmd/envsubst@latestReads stdin, writes substituted output to stdout:
echo 'hello ${USER}' | envsubst| Expression | Meaning |
|---|---|
${var} |
Value of $var |
${#var} |
String length of $var |
${var^} |
Uppercase first character of $var |
${var^^} |
Uppercase all characters in $var |
${var,} |
Lowercase first character of $var |
${var,,} |
Lowercase all characters in $var |
${var:n} |
Offset $var n characters from start |
${var:n:len} |
Offset $var n characters with max length of len |
${var#pattern} |
Strip shortest pattern match from start |
${var##pattern} |
Strip longest pattern match from start |
${var%pattern} |
Strip shortest pattern match from end |
${var%%pattern} |
Strip longest pattern match from end |
${var-default} |
If $var is not set, evaluate expression as $default |
${var:-default} |
If $var is not set or is empty, evaluate expression as $default |
${var=default} |
If $var is not set, evaluate expression as $default |
${var:=default} |
If $var is not set or is empty, evaluate expression as $default |
${var/pattern/replacement} |
Replace as few pattern matches as possible with replacement |
${var//pattern/replacement} |
Replace as many pattern matches as possible with replacement |
${var/#pattern/replacement} |
Replace pattern match with replacement from $var start |
${var/%pattern/replacement} |
Replace pattern match with replacement from $var end |
For a deeper reference, see bash-hackers or GNU pattern matching.
${var+default}${var:?default}${var:+default}
go test ./...
go vet ./...CI runs tests against Go 1.22, 1.23, and 1.24 on every push and pull request.
MIT — see LICENSE. Original copyright (c) 2017 drone.io; fork copyright (c) 2025 CloudSpinx.