2013-03-06 3 views
0

사용자 정의 된 시간만큼 실행되는 루프 내에서 값을 선언하고 변수를 호출하려고합니다. 이러한 변수를 루프 이후에 사용할 수있게하고 싶습니다. 내가 뭘하려고 수 있습니다 :Bash : 선언하고 변수에 값을 할당하고 루프 내에서 호출하십시오.

(round_nr 루프의 사용자 정의 세트) 모든 루프 그런 식으로
echo "HOW MANY ROUNDS OF TEST ITERATIONS WOULD YOU LIKE TO RUN?" 
read round_nr 
echo "Number of Iteration rounds set to: $round_nr!" 

for r in $(seq 1 $round_nr); do 
    echo "HOW MANY COLD TEST ITERATIONS DO YOU WANT IN ROUND $r?" 
    read COLD$r 
    echo "HOW MANY WARM TEST ITERATIONS DO YOU WANT IN ROUND $r?" 
    read WARM$r 
    echo "HOW MANY HOT TEST ITERATIONS DO YOU WANT IN ROUND $r?" 
    read HOT$r 
    echo "HOW MANY NR OF FIXES PER TEST ITERATION $r?" 
    read NUMFIX$r 
    echo "ITERATION $r INPUT VALUES: COLD/WARM/HOT/NUMFIX:" 
    echo $COLD$r $WARM$r $HOT$r $NUMFIX$r 
done 

네 개의 변수가 생성되어 사용자 입력 값이 할당됩니다. 나중에이 변수들을 사용할 계획입니다.

많은 도움에 감사드립니다!

답변

0

배열을 사용할 수도 있고 (아마도 선호되는 방법) eval 체조를 사용할 수도 있습니다. bash 맨 페이지에는 여러분이 알아야 할 모든 것이있다.

2

실제로는 declare을 사용할 수 있지만 배열을 사용하는 것이 훨씬 쉽습니다. (내가 여기에 공간을 절약하기 위해 read-p 플래그를 사용합니다. 당신이 그것을 사용할 필요가 없습니다) 배열로

for r in $(seq 1 $round_nr); do 
    read -p "HOW MANY COLD TEST ITERATIONS DO YOU WANT IN ROUND $r?" ans 
    declare "COLD$r=$ans" 
    read -p "HOW MANY WARM TEST ITERATIONS DO YOU WANT IN ROUND $r?" ans 
    declare "WARM$r=$ans" 
    read -p "HOW MANY HOT TEST ITERATIONS DO YOU WANT IN ROUND $r?" ans 
    declare "HOT$r=$ans" 
    read -p "HOW MANY NR OF FIXES PER TEST ITERATION $r?" ans 
    declare "NUMFIX$r=$ans" 
    echo "ITERATION $r INPUT VALUES: COLD/WARM/HOT/NUMFIX:" 

    # Here's the tricky part. It's easier to create the variable than it 
    # is to use it. 
    varcold="COLD$r" 
    varwarm="WARM$r" 
    varhot="HOT$r" 
    varnumfix="COLD$r" 

    echo ${!varcold} ${!varwarm} ${!varhot} ${!varnumfix} 
done 

, 그것은 각각의 경우에 단순히

for r in $(seq 1 $round_nr); do 
    read -p "HOW MANY COLD TEST ITERATIONS DO YOU WANT IN ROUND $r?" cold[r] 
    read -p "HOW MANY WARM TEST ITERATIONS DO YOU WANT IN ROUND $r?" warm[r] 
    read -p "HOW MANY HOT TEST ITERATIONS DO YOU WANT IN ROUND $r?" hot[r] 
    read -p "HOW MANY NR OF FIXES PER TEST ITERATION $r?" numfix[r] 
    echo "ITERATION $r INPUT VALUES: COLD/WARM/HOT/NUMFIX:" 
    echo ${cold[r]} ${warm[r]} ${hot[r]} ${numfix[r]} 
done 

의, 변수는 것이다 모든 (같은 등 파이프 라인에 넣어 또는 (...)로 묶어야)

+0

당신을 순전히 감사 한 당신이 서브 쉘에서 for 루프 실행을 위해 아무것도하지 않는 한, for 루프 후 사용할 수 있습니다 이것을 설명하면, 둘 다 훌륭하게 작동합니다. 나는 새로운 것을 배웠다 !! – Nikl

+0

추가 질문이 있는데,이 코드는 독립적으로 실행하면 잘 작동하지만 일단 스크립트에 삽입하면 코드가 읽기 부분에 도달하면 오류 [r] : 잘못된 변수 이름 오류가 반환됩니다. 여전히 루프 안에 있습니다. 어떤 서브 쉘이나 파이프에서도 실행되지 않으며, 괄호로 묶입니다. 문제가 무엇인지 알 수 있습니까? – Nikl

+0

: 배열 솔루션을 실행할 때입니다. – Nikl

관련 문제