将问题源复制到目标单引号

时间:2015-10-12 13:04:13

标签: shell unix

我在输入文件BONUS.PS,$DIR/BONUS.PSB

中有以下内容

以下是代码。

DIR=/home/sample
for i in `cat inputfile`
do
source=`echo $line|awk -F, '{print $1}'|tr -d "'"`
destination=`echo $line|awk -F, '{print $2}'|tr -d "'"`
echo $source $destination
cp -v $source $destination
done

我无法在这里完成复制。在源代码中,我得到的值为BONUS.PS,在目标中我得到的值为'$DIR/BONUS.PSB'(单引号)。由于单引号,我无法从源到目的地执行复制。

1 个答案:

答案 0 :(得分:0)

这是间接引用问题。

如上所述here,如何构建"动态"变量名称并评估其内容。这在获取配置文件时非常有用。

#!/bin/bash
# This could be "sourced" from a separate file.

isdnMyProviderRemoteNet=172.16.0.100
isdnYourProviderRemoteNet=10.0.0.10
isdnOnlineService="MyProvider"

remoteNet=$(eval "echo \$$(echo isdn${isdnOnlineService}RemoteNet)")
remoteNet=$(eval "echo \$$(echo isdnMyProviderRemoteNet)")
remoteNet=$(eval "echo \$isdnMyProviderRemoteNet")
remoteNet=$(eval "echo $isdnMyProviderRemoteNet")

echo "$remoteNet"    # 172.16.0.100

解决您的问题,

您可能需要将脚本更改为以下内容。

我更改了使用line并引用为i,删除了反引号,删除了tr

DIR=/home/sample
for i in $(cat inputfile)
do
source=$(echo $i|awk -F, '{print $1}')
destination=$(echo $i|awk -F, '{print $2}')

newdest=$(eval "echo $destination")
echo "$source"
echo "$newdest"

cp -v $source $newdest
done

我做了一个小测试,它工作正常。