2013-05-10 13 views
1

각 책의 한 페이지를 나타내는 일부 폴더를 처리하고 있습니다. 예 : "Iliad-001"은 Book = Iliad, Page = 001이됩니다.변수 할당 왼쪽에 매개 변수 대체 - BASH 및 배열

모든 폴더를 반복하고 각 책에 대한 배열을 만들고 발견 된 각 페이지에 해당 배열에 항목을 추가하여 스크립트의 끝에 echo ${Iliad[@]}을 입력하면됩니다. 찾은 모든 페이지의 멋진 목록.

캐치는 동적 이름을 가진 배열에 값을 추가하는 것입니다.

for j in */; do 
     vol_name=$(basename "$j" | sed 's/\(.*\)-[0-9]*/\1/') 
     page_name=$(basename "$j" | sed 's/.*-\([0-9]*\)/\1/') 
     $vol_name+=("$page_name") 
done  

이 반환 :이 $vol_name+="("$page_name")"에 변수 할당을 변경하는 경우

syntax error near unexpected token `"$page_name"' 

내가 좀 더 가까이 얻을 :

여기에 내가 직관적 인 생각 (명확하지 못하지만) 코드입니다
Iliad+=(001): command not found 
+0

은 참조하시기 바랍니다 [BashFAQ/006] (http://mywiki.wooledge.org/BashFAQ/006) –

답변

1

eval을 사용하여 작동하게 만들 수있었습니다.

현재 sed을 실행할 필요가 없습니다.

#! /bin/bash 

for j in */; do 
     j=$(basename "$j") 
     vol_name=${j%-*} 
     page_name=${j#*-} 
     eval "$vol_name+=('$page_name')" 
done  
echo ${Iliad[@]} 
+0

멋진 대답! 나는 eval이 무엇을하는지 정말로 이해하지 못한다고 생각한다. 그리고 대체 할 때 여분의 문자를 제거 할 수 있다고 생각조차하지 않았습니다. 고마워요! – Seth

+2

@Seth : 'help eval'을 참조하십시오. 인수를 쉘 명령으로 해석합니다. 그것은 매우 강력하지만 위험한 내장입니다. – choroba