首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >envsubst在bash for循环中未按预期工作

envsubst在bash for循环中未按预期工作
EN

Stack Overflow用户
提问于 2019-10-18 11:28:32
回答 2查看 1.3K关注 0票数 3

我正在尝试使用bash的envsubst将一个环境变量替换到一个文件中。这里有一个简单的例子,它不能像预期的那样工作:

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

代码语言:javascript
复制
echo 'Filename: ${FILE}' > test.txt

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

代码语言:javascript
复制
for FILE in `ls`; do envsubst < test.txt; done

Filename:

结果就是Filename:替换失败。

在此上下文中,Echo按预期工作:

代码语言:javascript
复制
for FILE in `ls`; do echo Filename: ${FILE}; done

Filename: test.txt

我不明白为什么echo可以工作,而envsubst会失败。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-18 11:46:36

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

试试这个

代码语言:javascript
复制
for FILE in `ls`; do
    env | grep FILE;
done

并将其与此进行比较

代码语言:javascript
复制
for FILE in `ls`; do
    export FILE;
    env | grep FILE;
done

所以,如果你想让FILE成为一个环境变量,你需要在前面使用export内置。

票数 3
EN

Stack Overflow用户

发布于 2019-10-18 11:43:46

确保导出该变量,如果您是偏执狂/注重安全的人,可以选择在命令行中对其进行命名:

代码语言:javascript
复制
export FILE
envsubst < template #all exported environment avail in template
envsubst '${FILE}' < template #only FILE available
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58443542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档