2012-02-08 3 views
0

for 루프에서 배열을 만들고 각 반복에 카운터 (배열 요소)에 포함 된 문자열을 사용하여 각 배열의 이름을 지정해야하는 bash 스크립트를 작성했습니다.Bash - 루프 카운터를 사용하여 배열 만들기

myArray=(joe bob dave mark) 


for i in "${myArray[@]}" 
do 
    "$k_array"=(`cat fileUsedToPopulate.txt`) 
done 

# echo to test if one of the arrays has been created and populated 

for j in "${joe_array[@]}" 
do 
    echo $j 
done 

원하는 결과가 joe_array bob_array 등 4 개 어레이 인 파일로 채워 각 : 여기

코드이다.

그러나 어쨌든 $ k를 이스케이프 처리하여 배열 이름에 추가/채울 때 추가 할 수는 없습니다.

라인 (30) : : 대한

감사 : 예기치 않은 토큰 `cat fileUsedToPopulate.txt '"$k_array"=( 고양이 $ DIR/$ braDir/oem.txt`) 라인 (30)'근처의 구문 오류 여기

내가 점점 오전 오류입니다 제공되는 모든 도움. 파일의 내용에 공백 또는 다른 구분 기호를 포함하는 경우 (적절한 이스케이프와) 중첩 된 따옴표가 필요

val=$(cat fileUsedToPopulate.txt) 
for k in "${myArray[@]}" 
do 
    eval "${k}_array"="\"${val}\"" 
done 

참고 :

답변

2

을 사용하면 이름이 다른 변수에 따라 달라집니다 변수에 할당 평가 후면. 그렇지 않으면 쉘은 명령의 일부를 해석 할 것이다. 또한 $k에 변수 이름 주위에 중괄호가 있어야하거나 쉘이 변수 이름 k_array을 찾을 것입니다.

+0

예, 알겠습니다 .--). 좋은 하루 되세요. – shellter

+0

감사합니다. –

+0

답장을 보내 주셔서 감사합니다. 사용 된 파일에 대한 메모입니다. 예제 코드입니다. 실제 스크립트에서 배열을 채우는 데 사용 된 파일은 각 반복마다 다릅니다. $ k에 의존하는 텍스트 파일을 가리키는 데 사용되는 경로가 있습니다. 나는 eval 코드를 사용하려고 시도했다. 그러나 첫 번째 \를 벗어나지 않고 루프가 제대로 종료되지 않는다. –