UNIX AIX는 배열을 사용하여 이름과 경로를 저장한 다음 for 루프를 사용하여 각각을 가져옵니다.

UNIX AIX는 배열을 사용하여 이름과 경로를 저장한 다음 for 루프를 사용하여 각각을 가져옵니다.

일부 파일의 경로와 이름이 포함된 배열을 생성해야 하는 스크립트가 있습니다.

그런 다음 사용자의 매개변수가 배열의 이름 중 하나와 일치하는지 확인한 후 경로와 이름을 별도로 다른 스크립트에 전달해야 합니다.

array1[0]="/Distenation1/File1.txt"
array1[1]="file1"

#testing another way to set an array
set -A array2 "/Distenation2/File2.txt" file2

전체 배열을 전달하는 방법을 찾을 수 없고 for 루프에서 사용자와 일치시키려는 방법을 찾을 수 없기 때문에 문제가 발생합니다.매개변수 $1그리고파일 1또는파일 2그리고 해당 경로를 다른 스크립트에 전달합니다.

#the following code doesnt work as needed -logically-
for i in ${array1[@]} ${array2[@]}
do
        if [ $1 = ${i[1]} ]
        then
                ./sendfile ${i[0]}
        fi;
done

편집: ksh 버전 = 버전 M-11/16/88f인 것 같습니다.

위와 동일한 코드를 사용하지만 echo를 사용하여 예를 보여줍니다.

암호:

for i in ${array1[@]} ${array2[@]}
do
    echo Name : ${i[1]} '\n'Path : ${i[0]}
done

산출:

Name :
Path : /Distenation1/file1.txt
Name :
Path : file1
Name :
Path : /Distenation2/file2.txt
Name :
Path : file2

원하는 결과는 다음과 같아야 합니다.

Name : file1
Path : /Distenation1/file1.txt
Name : file2
Path : /Distenation2/file2.txt

답변1

나는 이해한다고 생각되는 해결 방법을 시도했습니다.

#put all the data inside 1 array
array1[0]="/Distenation1/File1.txt"
array1[1]="file1"
array1[2]="/Distenation2/File2.txt"
array1[3]="file2"

#create a counter    
n=0

#the trick here was that 'i' (loop) stores 1 array data per iteration (at first i thought it stores the whole array data then go through them 1 by one)
for i in ${array1[@]}
do
        if [ $1 = ${i} ]
        then
#here i had to call the original array to be able to read through any data inside the array
                echo Name : $i '\n' Path : ${array1[$n+1]}
        fi;

        let n=n+1
done;

산출:

=>test1 file1
Name : file1
 Path : /Distenation1/File1.txt

이것이 모범 사례인지는 확실하지 않지만 매우 큰 스크립트로 작업하고 매 밀리초의 최적화가 차이를 만들기 때문에 더 나은 솔루션이나 최적화된 코드에 열려 있습니다.

관련 정보