Shell 将问题源复制到目标单报价单
我在一个输入文件Shell 将问题源复制到目标单报价单,shell,unix,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
下面是代码
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'
(单引号)。由于单引号,我无法执行从源到目标的复制。这是间接引用问题
如前所述,如何构建“动态”变量名并评估其内容。这在查找配置文件时非常有用
#!/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
我做了一个小测试,效果很好。我的输入文件中有以下内容。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我可以实现在这里工作的副本。在源代码中,我得到的值是BONUS.PS;在目标代码中,我得到的值是'$DIR/BONUS.PSB'(单引号),因为我可以执行从源代码到目标的复制。
newdest=$(eval“echo$destination”)
将解决此问题。看到我的答案了吗