2011-10-14 4 views
0

먼저 ..., 유닉스

  • 내가 가지고있는 'N'라인의 'N'양 파일의 양. 내가 아는 한 은 행 수가 짝수가 될 것입니다.
  • 사용자가 원하는 파일을 선택합니다. 이것은 ${selected_sets[@]}이라는 배열에 저장됩니다.
  • 프로그램이 무작위로 선택된 '홀수 번호' 줄을 화면에 인쇄합니다. 선이 인쇄되면
  • , 나는 그것의 대부분은 괜찮습니다 ... 다시 인쇄

싶지 않아,하지만 난 ${selected_sets[@]}의 내용을 기반으로 문제가 만드는 배열을 데 ... I 나는 모든 잘못 내 구문을 :) 가지고 생각

for i in ${selected_sets[@]} 
do 
    x=1 
    linecount=$(cat $desired_path/$i | wc -l) #get line count of every set 

     while [ $x -le $linecount ] 
     do ${i}[${#${i}[@]}]=$x 
     x=$(($x+2)) # only insert odd numbers up to max limit of linecount 
     done 
done 

문제는 내가 array[${#array[@]}]=$x를 사용할 수 있지만 변수 이름을 사용하는 방법을 모르는 것을 알고 ${i}[${#${i}[@]}]=$x 입니다.

모든 아이디어가 가장 환영받을 것입니다 (저는 정말 곤란합니다) !!! 난 당신이 다음 해당 변수를 참조 할 방법 만 확실하지 해요 declare 명령

declare -a name=${#${i}[@]} 

를 사용

+0

왜 변수의 이름을 지정 하시겠습니까? 나중에 배열에 다시 액세스하려면 두 개의 하위 배열에 저장하면됩니다.이 배열은 for 루프 외부에서 선언 할 수 있습니다. –

+0

저는 배쉬 어레이를 약 1 주간 사용했기 때문에 제 생각은 이것이 제가 원하는 것을 성취 할 수있는 가장 좋은 방법이라고 생각한다는 사실에 기초를 두었습니다 ... 이중으로 쓰여진 배열은 새로운 것입니다. 그들에게 책을주고 그들이 내가 원하는 것을 지켜 볼 것입니다. 머리를 주셔서 감사합니다! – beoliver

+0

P.S. - 온라인 문서화에 대한 아이디어가 있습니까? – beoliver

답변

2

일반적으로이 유형은 eval을 사용하여 문제를 해결합니다. 당신이 "foo는"이름이 AA 변수를 원하는 변수 바 = "foo는"이있는 경우, 당신은 단순히 수행

 
eval $bar=5 

배쉬 (또는 SH)를 취급 당신이 입력 한 것처럼

 
foo=5 

따라서 다음과 같이 작성하면됩니다.

 
eval ${i}[\${#${i}[@]}]=$x 

적합한 이스케이프 처리. 유용한 방법은 'eval'을 'echo'로 바꾸고, 스크립트를 실행하고 출력을 검사하여 원하는 것으로 보이는지 확인하는 것입니다.

1

당신은 이름을 만들 수있는 변수는, 지금 그것을 조사 할 시간이 없어.

배열을 사용하여 :

declare -a myArray 

for i in ${selected_sets[@]} 
do 
x=1 
linecount=$(cat $desired_path/$i | wc -l) #get line count of every set 

    while [ $x -le $linecount ] 
    do 
    $myArray[${#${i}[@]}]=$x 
    let x=x+1 #This is a bit simpler! 
    done 
done 

가 조심! 위의 테스트를하지 않았습니다. HTH