Answers:
如文本所示,您只需要像通常的shell命令中一样引用(例如通过$VARNAME
或${VARNAME}
)变量即可。但是,您必须确保外壳不会事先扩展它们。
这里有一些示例来说明这一点(假设export FOO=BAR
):
$ echo '$FOO$FOO2' | envsubst
BAR
如您所见,由于未定义$ FOO2,因此已将其替换为“”。现在我们可以通过以下方式将替换限制为仅$ FOO:
$ echo '$FOO$FOO2' | envsubst '$FOO'
BAR$FOO2
使用""
代替''
会导致在需要之前进行替换:
echo '$FOO$FOO2' | envsubst "$FOO"
$FOO$FOO2
(这相当于envsubst "BAR"
没有检测到变量的有效调用,因此不会替换任何变量。)
正如man
-page所说,所有在其中引用的变量都将SHELL-FORMAT
被替换,因此我们甚至可以这样做:
echo '$FOO$FOO2$FOO3' | envsubst '$FOO some more text ${FOO3}'
BAR$FOO2
如您所见,SHELL-FORMAT
它非常灵活。
最后,该参数--variables
允许您评估选择了哪些变量以替换SHELL-FORMAT
:
envsubst --variables '$FOO some more text ${FOO3}'
FOO
FOO3
在上面的过早替换示例中,这将显示错误:
$ envsubst --variables "$FOO"
(empty string returned)
如man
-page 中所述,envsubst
存在时不处理任何stdinput --variables
。
以下是一些示例,可以帮助我了解如何正确使用它。令我惊讶的是,envsubstonly替换了参数中提到的变量。
$ export FOOX="foox"
$ export FOOY="fooy"
$ export FOOZ="fooz"
$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst
x foox y fooy z fooz
$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOX'
x foox y $FOOY z $FOOZ
$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOX $FOOZ'
x foox y $FOOY z fooz
$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOZ $FOOY'
x $FOOX y fooy z fooz
我也不明白SHELL-FORMAT是什么意思,仍然不知道为什么这样命名。但是经过以上实验,我想我知道它能做什么。