我在输入文件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'
(单引号)。由于单引号,我无法从源到目的地执行复制。
答案 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
我做了一个小测试,它工作正常。