如何在Ksh中迭代多个字符串

时间:2015-01-27 11:48:24

标签: shell loops unix copy ksh

我希望使用一个for循环遍历多个字符串,以便在Unix脚本中执行一系列文件复制操作。

因此给出了许多表示目录的字符串:

file1="${HOME_PATH}/data1.dat"
file2="${HOME_PATH}/one/model1/data2.dat"
file3="${HOME_PATH}/two/model2/data3.dat"
file4="${HOME_PATH}/three/model3/data4.dat"
file5="${HOME_PATH}/three/model4/data5.dat"
file6="${HOME_PATH}/three/model5/data5.dat" 

我想将其中的每一个复制到特定目录:

dest1="${DEST_PATH}/data1.dat"
dest2="${DEST_PATH}/one/model1/data2.dat"
dest3="${DEST_PATH}/two/model2/data3.dat"
dest4="${DEST_PATH}/three/model3/data4.dat"
dest5="${DEST_PATH}/three/model4/data5.dat"
dest6="${DEST_PATH}/three/model5/data5.dat"

有没有办法列出每个文件位置,就像我上面所做的那样,然后只是为了一个for循环...

for each i in {1..6}
do
   cp file[i] dest[i]
done

2 个答案:

答案 0 :(得分:2)

您可以使用间接:

for i in {1..6}
do
  file="file$i"
  dest="dest$i"
  echo "${!file} ${!dest}" #or whatever you want to do with each file
done

来自How can I use variable variables (indirect variables, pointers, references) or associative arrays?

  

BASH允许您间接扩展参数 - 即一个参数   变量可能包含另一个变量的名称:

 # Bash
 realvariable=contents
 ref=realvariable
 echo "${!ref}"   # prints the contents of the real variable

答案 1 :(得分:2)

file[1]="${HOME_PATH}/data1.dat"
file[2]="${HOME_PATH}/one/model1/data2.dat"
file[3]="${HOME_PATH}/two/model2/data3.dat"
file[4]="${HOME_PATH}/three/model3/data4.dat"
file[5]="${HOME_PATH}/three/model4/data5.dat"
file[6]="${HOME_PATH}/three/model5/data5.dat" 

dest[1]="${DEST_PATH}/data1.dat"
dest[2]="${DEST_PATH}/one/model1/data2.dat"
dest[3]="${DEST_PATH}/two/model2/data3.dat"
dest[4]="${DEST_PATH}/three/model3/data4.dat"
dest[5]="${DEST_PATH}/three/model4/data5.dat"
dest[6]="${DEST_PATH}/three/model5/data5.dat"

for i in "${file[@]}"
do
    cp ${file[i]} ${dest[i]}
done