Skip to content

Repository files navigation

envsubst

ciGo ReferenceGo Report Card

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.

Install

As a library

go get github.com/cloudspinx/envsubst
import"github.com/cloudspinx/envsubst"out, err:=envsubst.EvalEnv("hello ${NAME:-world}")

As a CLI

go install github.com/cloudspinx/envsubst/cmd/envsubst@latest

Reads stdin, writes substituted output to stdout:

echo'hello ${USER}'| envsubst

Supported Functions

ExpressionMeaning
${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 $varn characters from start
${var:n:len}Offset $varn 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.

Unsupported Functions

  • ${var+default}
  • ${var:?default}
  • ${var:+default}

Development

go test ./...
go vet ./...

CI runs tests against Go 1.22, 1.23, and 1.24 on every push and pull request.

License

MIT — see LICENSE. Original copyright (c) 2017 drone.io; fork copyright (c) 2025 CloudSpinx.

About

Go package emulates bash environment variable substitution

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages