我正在创建一个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
命令中使用之前,是否可以重新解释此路径?
答案 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
在使用eval
:http://mywiki.wooledge.org/BashFAQ/048
更安全的方法是使用declare
代替eval
:
declare "$x=another_value"
感谢最新的chepner 2.
答案 2 :(得分:0)
试试这个
cp myOtherFile `echo $a`