일부 파일의 경로와 이름이 포함된 배열을 생성해야 하는 스크립트가 있습니다.
그런 다음 사용자의 매개변수가 배열의 이름 중 하나와 일치하는지 확인한 후 경로와 이름을 별도로 다른 스크립트에 전달해야 합니다.
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
이것이 모범 사례인지는 확실하지 않지만 매우 큰 스크립트로 작업하고 매 밀리초의 최적화가 차이를 만들기 때문에 더 나은 솔루션이나 최적화된 코드에 열려 있습니다.