0

我正在创建一个读取其他环境变量的 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在命令中使用之前可以重新解释此路径吗?

4

3 回答 3

1

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

export a=$b/c/d/e

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

source $HOME/myfile
... commands ...
cp myOtherFile "$a"
... commands ...
于 2012-10-01T15:25:06.880 回答
1

你需eval要这样做:

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

在使用之前,我向您推荐此文档:http eval: //mywiki.wooledge.org/BashFAQ/048

更安全的方法是使用declare而不是eval

declare "$x=another_value"

感谢最新的 chepner 2。

于 2012-10-01T15:48:16.573 回答
0

试试这个

cp myOtherFile `echo $a`
于 2012-10-01T15:24:24.103 回答