我正在尝试通过进行环境变量替换envsubst
,但是我只想替换特定的变量。
从文档中,我应该能够告诉我envsubst
仅替换某些变量,但我无法做到这一点。
例如,如果我有一个包含以下内容的文件:
VAR_1=${VAR_1}
VAR_2=${VAR_2}
我应该如何执行envsubst
以便仅替换对的引用${VAR_1}
?
我正在尝试通过进行环境变量替换envsubst
,但是我只想替换特定的变量。
从文档中,我应该能够告诉我envsubst
仅替换某些变量,但我无法做到这一点。
例如,如果我有一个包含以下内容的文件:
VAR_1=${VAR_1}
VAR_2=${VAR_2}
我应该如何执行envsubst
以便仅替换对的引用${VAR_1}
?
Answers:
根据手册页:
envsubst [OPTION] [SHELL-FORMAT]
如果给出了SHELL-FORMAT,则仅替换SHELL-FORMAT中引用的那些环境变量;否则,将替换它们。否则,将替换标准输入中出现的所有环境变量引用。
其中SHELL格式字符串“与引用壳牌在表单变量字符串$variable
或${variable}
[...]变量名必须单独的字母数字组成,或下划线ASCII字符,不能以数字开头和非空,否则这样的变量引用忽略了。” 。
因此,必须将各自的变量名称传递envsubst
给shell格式的字符串(显然,必须对它们进行转义/引用,以便从字面上传递给envsubst
)。例:
输入文件,例如infile
:
VAR1=${VAR1}
VAR2=${VAR2}
VAR3=${VAR3}
还有一些值,例如
export VAR1="one" VAR2="two" VAR3="three"
然后跑步
envsubst '${VAR1} ${VAR3}' <infile
要么
envsubst '${VAR1},${VAR3}' <infile
要么
envsubst '${VAR1}
${VAR3}' <infile
输出
VAR1=one
VAR2=${VAR2}
VAR3=three
或者,如果您喜欢反斜杠:
envsubst \$VAR1,\$VAR2 <infile
产生
VAR1=one
VAR2=two
VAR3=${VAR3}
envsubst "$(printf '${%s} ' ${!PREFIX*})" < infile
SUBST_VARS
:envsubst "$(printf '${%s} ' $SUBST_VARS)" < infile