Bash 替换文件中的环境变量
我有一个Bash 替换文件中的环境变量,bash,shell,environment-variables,zsh,Bash,Shell,Environment Variables,Zsh,我有一个myfile,其中包含如下行 #!/usr/bin/env python3 print("Hello world") names = ('${(j:', ':)ZSH_VAR[@]}', ) 我想在我加载的shell中使用环境变量预处理这个文件(zsh,在我的例子中,但是通用的bash解决方案也可以很好地工作) 我怎样才能做到这一点 $ declare -ga ZSH_VAR=( 1 2 3 ) $ preprocess < myfile 为此,您可以使用e
myfile
,其中包含如下行
#!/usr/bin/env python3
print("Hello world")
names = ('${(j:', ':)ZSH_VAR[@]}', )
我想在我加载的shell中使用环境变量预处理这个文件(zsh
,在我的例子中,但是通用的bash
解决方案也可以很好地工作)
我怎样才能做到这一点
$ declare -ga ZSH_VAR=( 1 2 3 )
$ preprocess < myfile
为此,您可以使用
eval
$ BAR=1234 FOO=abcd; while read -r line; do eval 'echo "'"$line"'"'; done < "file"
注意
小心点。确保您的文件不包含
rm
命令。只是为了安全。我不确定我是否理解正确,但您是否在寻找?eval'bar=“$bar”
或declare'bar=“$bar”
?请查看Wooledge wiki上的页面。不过,只有在您信任数据的情况下才可以使用。使用envsubt
更安全;文件中的$(rm-rf~)
不可能破坏您的主目录。如果要使用eval
,最好使用eval'echo'“$line”'”
,这样您就不会有一行包含*HELLO*
的文件名列表替换*
,或者将制表符改为空格,或者删除前导制表符,等等。也就是说,正如目前所写的,这个答案有很多意外/不希望出现的行为。请参见……中的上述问题演示,将上面的输出与……中演示的较少中断(但仍然不安全)的方法进行比较(请注意显示固定版本的链接中read
之前的IFS=
,该链接在read
进入行之前就停止删除前导和尾随空格
了!)
$ BAR=1234 FOO=abcd; while read -r line; do eval 'echo "'"$line"'"'; done < "file"
#!/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