间接变量bash中的命令

时间:2016-10-31 08:31:27

标签: bash

我的代码不起作用。 我试图简单地将命令保存到具有间接变量的变量。

执行后我得到:

*destL="/media/user/something" _destL=destL

rsync_home="rsync -avz --delete /home/ \$$_destL$home"

eval echo `$rsync_home`*

输出是:

*rsync: mkdir "/home/user/place where my script is located/$destL/home" failed: No such file or directory (2)
rsync error: error in file IO (code 11) at main.c(674) [Receiver=3.1.0]
sending incremental file list*

但是当我尝试使用命令检查*$rsync_home*中的内容时 eval echo "$rsync_home"

输出是正确的命令:

rsync -avz --delete /home/ /media/michal/something/home/

为什么这个间接变量不应该像变量那样显示在变量中,而是$destL

1 个答案:

答案 0 :(得分:1)

停止使用eval,并定义一个功能:

rsync_home () {
  rsync -avz -delete /home "$1"/home
}

然后致电

rsync_home /media/user/something