首页 > 解决方案 > 替换文件中的环境变量

问题描述

我有一个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', )

标签: bashshellenvironment-variableszsh

解决方案


您可以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命令。只是为了安全。


推荐阅读