如何将变量名称替换为命令中的文件名?

时间:2014-02-28 14:08:06

标签: linux bash shell

我正在尝试创建一个运行所有可用计算机的脚本,并将一些数据保存到我的主文件夹中。

machines=`cat $OAR_FILE_NODES | uniq`
for machine in ${machines}
do
    echo "connecting to:" ${machine}
    oarsh ${machine} 'tar -zcvf data_${machine}.tar.gz /tmp/data'
done 

问题是所有数据都会保存到data_.tar.gz存档,并多次覆盖。

如何让shell将变量 machine 替换为传递给oarsh的命令?

1 个答案:

答案 0 :(得分:1)

正如评论中所看到的,由于单引号',它是关于不扩展的变量。通过更改为双引号",可以正确扩展变量:

oarsh ${machine} "tar -zcvf data_${machine}.tar.gz /tmp/data"
                 ^                                          ^

请注意,使用单引号时,oarsh会收到的是文字:

tar -zcvf data_${machine}.tar.gz /tmp/data

使用双引号时会替换$machine值:

tar -zcvf data_THE_MACHINE.tar.gz /tmp/data