2015-01-27 4 views
0

하나의 for 루프를 사용하여 여러 문자열을 반복하여 Unix 스크립트에서 일련의 파일 복사 작업을 수행하려고합니다.Ksh에서 여러 문자열을 반복하는 방법

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 
+0

'find '와'mkdir -p $ {filename % * /}'와'cp'를 사용하면 어떨까요? 너? 하위 경로에 접미어를 지정할 필요가 없으며 반복 할 필요가 없습니다. –

+0

죄송합니다 얘들 아, 이후 내가 KSH에 대한 구현이 바스 (무 이해는 구문이 다를 것입니다) 'set -A fnames "<여섯 개의 파일 경로 " 세트 -A의 dnames"<여섯 개 대상 경로> " VAR = $ 0에서 F위한 {fnames [@]} \t \t 메아리 함"I가 F $ 복사하고 $ {dnames [VAR]} "; \t \t var = $ ((var + 1)) \t done' –

답변

2

# Bash 
realvariable=contents 
ref=realvariable 
echo "${!ref}" # prints the contents of the real variable 
: - : 이것에 대한 방향 즉, 하나 개의 변수가 다른 변수의 이름을 포함 할 수

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 

BASH

How can I use variable variables (indirect variables, pointers, references) or associative arrays?에서 당신이 간접적으로 매개 변수를 확장 할 수 있습니다

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 
관련 문제