envsubst在bash for循环中无法按预期工作

时间:2019-10-18 03:28:31

标签: bash

我正在尝试使用bash的envsubst将环境变量替换为文件。这是一个无法按预期工作的简单示例:

创建一个包含变量替换的文件:

echo 'Filename: ${FILE}' > test.txt

现在尝试在for循环中使用envsubst:

for FILE in `ls`; do envsubst < test.txt; done

Filename:

结果只是Filename:替换失败。

回声在这种情况下可以正常工作:

for FILE in `ls`; do echo Filename: ${FILE}; done

Filename: test.txt

我不明白为什么回声会起作用而envsubst会失败。

2 个答案:

答案 0 :(得分:2)

这是因为在for循环FILE中是一个shell变量,它实际上不是环境的一部分,因此不会传递给envsubst的环境。

尝试一下

for FILE in `ls`; do
    env | grep FILE;
done

并将其与此

进行比较
for FILE in `ls`; do
    export FILE;
    env | grep FILE;
done

因此,如果要使FILE为环境变量,则需要使用以前内置的export

答案 1 :(得分:1)

请确保导出该变量,并且,如果您偏执/出于安全考虑,请选择在命令行上将其命名:

export FILE
envsubst < template #all exported environment avail in template
envsubst '${FILE}' < template #only FILE available