Joã*_*elo 81 shell environment-variables
我正在尝试通过 执行环境变量替换envsubst,但我只想替换特定变量。
从文档中,我应该能够告诉envsubst只替换某些变量,但我无法做到这一点。
例如,如果我有一个包含以下内容的文件:
VAR_1=${VAR_1}
VAR_2=${VAR_2}
Run Code Online (Sandbox Code Playgroud)
我应该如何执行envsubst以便它只替换对 的引用${VAR_1}?
don*_*sti 247
根据手册页:
envsubst [OPTION] [SHELL-FORMAT]
Run Code Online (Sandbox Code Playgroud)
如果给出了 SHELL-FORMAT,则仅替换 SHELL-FORMAT 中引用的那些环境变量;否则,将替换标准输入中出现的所有环境变量引用。
其中 SHELL-FORMAT 字符串是“引用表单中的 shell 变量的字符串$variable或${variable}[...]忽略了。” .
因此,必须将各自的变量名称传递envsubst给 shell 格式的字符串(显然,它们需要被转义/引用以便按字面传递给envsubst)。例子:
输入文件例如infile:
VAR1=${VAR1}
VAR2=${VAR2}
VAR3=${VAR3}
Run Code Online (Sandbox Code Playgroud)
和一些值,如
export VAR1="one" VAR2="two" VAR3="three"
Run Code Online (Sandbox Code Playgroud)
然后运行
envsubst '${VAR1} ${VAR3}' <infile
Run Code Online (Sandbox Code Playgroud)
或者
envsubst '${VAR1},${VAR3}' <infile
Run Code Online (Sandbox Code Playgroud)
或者
envsubst '${VAR1}
${VAR3}' <infile
Run Code Online (Sandbox Code Playgroud)
产出
VAR1=one
VAR2=${VAR2}
VAR3=three
Run Code Online (Sandbox Code Playgroud)
或者,如果您更喜欢反斜杠:
envsubst \$VAR1,\$VAR2 <infile
Run Code Online (Sandbox Code Playgroud)
产生
VAR1=one
VAR2=two
VAR3=${VAR3}
Run Code Online (Sandbox Code Playgroud)
在调用之前,envsubst您应该使用单引号导出来恢复VAR_1修改。如:
export VAR_1='somevalue'
Run Code Online (Sandbox Code Playgroud)
欲了解更多详情,请参阅: