envsubst 用shell中环境变量值替换字符串中的变量

在shell脚本中,常会遇到需要动态修改或生成配置文件的场景,这个情况如果在其他编程语言里,

就会直接使用模板生成,在shell脚本中就可以用envsubst命令实现。

用法

1
envsubst [OPTION] [SHELL-FORMAT]

在正常操作模式下,标准输入被复制到标准输出,对 $VARIABLE 或 ${VARIABLE} 形式的环境变量的引用被替换为相应的值。如果给出了 SHELL-FORMAT,则仅替换那些在 SHELL-FORMAT 中引用的环境变量;否则,标准输入中出现的所有环境变量引用都将被替换。

示例

  1. 替换所有环境变量

模板文件welcome.txt内容如下

1
Hello user $USER in $DESKTOP_SESSION. It's time to say $HELLO!

设置环境变量,并替换如下

1
2
3
export HELLO="good morning"
envsubst < welcome.txt
Hello user joe in Lubuntu. It's time to say good morning!
  1. 替换指定环境变量

使用 [SHELL-FORMAT] 指定环境变量参数

模板文件shell_format_test.txt内容如下

1
This is $FOO and this $BAR

只替换一个变量

1
2
3
export FOO=foo export BAR=bar
envsubst '$FOO' < shell_format_test.txt
This is foo and this $BAR

替换多个变量

1
2
3
export FOO=foo export BAR=bar
envsubst '$FOO,$BAR' < shell_format_test.txt
This is foo and this bar

参考