我有一个像
这样的bash脚本source ./testscript
while read line
do
echo "$line"
done < "test.file"
testcript就像
VAR="hello"
test.file就像
"$VAR" world!!!
我希望我的bash脚本的输出是
你好世界!!!
但我得到的是
“$ VAR”世界!!!
有没有解决方案?
答案 0 :(得分:1)
您不想使用eval
。 eval
允许将任意代码嵌入到您的(text?)文件中,这肯定不是您想要的,特别是如果不受信任的用户具有对该文件的写入权限。
如果您不需要扩展任意命名的变量,您可以执行以下操作,但可能有更好的方法来解决您实际尝试解决的问题。
$ cat t.sh
#!/bin/bash
VAR1=hello
VAR2='!!!'
FOO=test
expand_vars()
{
local s=$*
local var
for var in VAR{1..9} FOO; do
s=${s//%${var}%/${!var}}
done
echo "${s}"
}
while read line; do
line=$(expand_vars "${line}")
echo "${line}"
done <<__DATA__
%VAR1% world%VAR2%
This is a %FOO%
__DATA__
$ ./t.sh
hello world!!!
This is a test
答案 1 :(得分:-1)
你可以尝试
echo `eval "echo $line"`
而不是
echo "$line"