bash - 替换文件中的环境变量
问题描述
我有一个myfile
包含像这样的行
#!/usr/bin/env python3
print("Hello world")
names = ('${(j:', ':)ZSH_VAR[@]}', )
我想在我加载的 shell 中使用环境变量预处理这个文件(zsh
在我的情况下,但通用bash
解决方案也可以很好地工作)。
我该怎么做
$ declare -ga ZSH_VAR=( 1 2 3 )
$ preprocess < myfile
这样输出是
#!/usr/bin/env python3
print("Hello world")
bar=('1', '2', '3', )
解决方案
您可以eval
用于此目的。
$ BAR=1234 FOO=abcd; while read -r line; do eval 'echo "'"$line"'"'; done < "file"
或者在脚本中。(脚本.sh )
#!/bin/bash
while read -r line; do eval 'echo "'"$line"'"'"; done < "file"
# If you want to redirect the output into a file (out.txt).
# while read -r line; do eval 'echo "'"$line"'" >> out.txt'; done < "file"
# Or this
# while read -r line; do eval 'echo "'"$line"'"'; done < "file" > out.txt
然后像这样调用脚本:
FOO=abcd BAR=1234 ./script.sh
笔记
当心。确保您的文件不包含rm
命令。只是为了安全。
推荐阅读
- c++ - 英特尔实感的等效传感器是什么
- mysql - 错误 1142 (42000): SELECT 命令拒绝用户 ''@'localhost' 用于表 'user'
- codeigniter - Codeigniter - 在根目录下访问文件
- javascript - 在反应中绑定和删除事件的确切位置
- c++ - C++ 指向向量的指针与指向向量元素的指针
- vba - VBA匹配并更新现有并将新字段添加到下一行的下一个空单元格中
- angular - Angular 5路由中的queryParams列表为空
- php - 如何制作具有相同角色的多用户网站
- python - 在 groupby 中创建多个列进行计算?
- javascript - 如何在 Chrome 扩展中安全地存储 JSON Web 令牌以供进一步 API 使用?