无法使用bash将变量作为存储在文件中的变量进行访问

时间:2014-04-03 05:25:39

标签: bash file shell git-bash

我有一个像

这样的bash脚本
source ./testscript

while read line
do
      echo "$line"
done < "test.file"

testcript就像

VAR="hello"

test.file就像

"$VAR" world!!!

我希望我的bash脚本的输出是

  

你好世界!!!

但我得到的是

  

“$ VAR”世界!!!

有没有解决方案?

2 个答案:

答案 0 :(得分:1)

您不想使用evaleval允许将任意代码嵌入到您的(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"