0

我有两组数据,比如说a=file1 file2 file3b=location1 location2 location3。现在我需要循环并复制file1location1file2location2file3location3

如果我使用 for 循环,那么在内循环的第一次迭代之后,它应该回到外循环,取第二个值,进入内循环并取第二个值,依此类推。基本上,内循环不应该对外循环中的每个值进行迭代。

有没有办法做到这一点?

提前致谢。苏迪尔

4

3 回答 3

1

在这里肯定$SHELL是最简单的,尽管一旦你开始做数组,bash这种优势就会开始消散;-) 所以,为了比较,这里有一个简单的非单行perl方法:

 #!/usr/bin/env perl
 my @arraya = qw/ file1 file2 file3/ ; 
 my @arrayb = qw/ location1 location2 location3/ ;
 foreach my $i ( 0 .. $#arraya ) {`cp $arraya[$i] $arrayb[$i]` }

@arraya并且@arrayb可以通过/m//匹配和过滤、greping、finding 等 以编程方式构造成非常大的列表。

cf基础perl工具rename

于 2013-07-09T21:12:01.437 回答
1

听起来你太复杂了:

a=(file1 file2 file3)
b=(location1 location2 location3)

for (( idx=0; idx<${#a[@]}; idx++ )); do
    cp -v "${a[idx]}" "${b[idx]}"
done
于 2013-07-09T19:21:22.453 回答
1

您可以创建 bash 数组并使其适合您:

declare -a f=( "file1" "file2" "file3" )
declare -a d=( "location1" "location2" "location3" )
c=0
for i in ${f[@]}; do
   echo $i ${d[$c]}
   ((c++))
done

或者没有数组,类似这个脚本的东西也应该适合你:

ci=0
for i in file1 file2 file3; do 
   ((ci++))
   cj=1
   for j in location1 location2 location3; do
      [[ $ci = $cj ]] && echo $i $j && break
     ((cj++))
   done
done

输出:

file1 location1
file2 location2
file3 location3
于 2013-07-09T19:22:12.537 回答