Linux脚本:重新解释环境变量

时间:2012-10-01 15:14:26

标签: linux bash shell command

我正在创建一个Bash脚本,它读取其他一些环境变量:

echo "Exporting configuration variables..."
while IFS="=" read -r k v; do
    key=$k
    value=$v

    if [[ ${#key} > 0 && ${#value} > 0 ]]; then
        export $key=$value
    fi
done < $HOME/myfile

并拥有变量:

$a=$b/c/d/e

并希望像以下一样致电$a

cp myOtherFile $a

副本的目标文件夹的结果是“$ b / c / d / e”,并显示错误:

"$b/c/d/e" : No such file or directory

因为它实际上被解释为文件夹路径。

cp命令中使用之前,是否可以重新解释此路径?

3 个答案:

答案 0 :(得分:1)

听起来您希望$HOME/myfile支持Bash表示法,例如参数扩展。我认为最好的方法是将$HOME/myfile修改为实质上是Bash脚本:

export a=$b/c/d/e

并使用source builtin将其作为当前Bash脚本的一部分运行:

source $HOME/myfile
... commands ...
cp myOtherFile "$a"
... commands ...

答案 1 :(得分:1)

您需要eval才能执行此操作:

$ var=foo
$ x=var
$ eval $x=another_value
$ echo $var
another_value

在使用evalhttp://mywiki.wooledge.org/BashFAQ/048

之前,我建议您使用此文档

更安全的方法是使用declare代替eval

declare "$x=another_value"

感谢最新的chepner 2.

答案 2 :(得分:0)

试试这个

cp myOtherFile `echo $a`