2017-11-10 1 views
1

이 코드는 아무런 오류도 나타내지 않지만 카운터 ++를 사용하면 첫 번째 반복이 실패합니다.왜 카운터 (카운터 ++)는 카운터 == 0 일 때 실패합니까?

[email protected]:~$ bash -x test.sh 
+ parameters='one two three' 
+ counter=0 
+ for option in '$parameters' 
+ eval one= 
++ one= 
+ ((counter++)) 
+ echo one 1 
one 1 
+ for option in '$parameters' 
+ eval two= 
++ two= 
+ ((counter++)) 
+ echo two 0 
two 0 
+ for option in '$parameters' 
+ eval three= 
++ three= 
+ ((counter++)) 
+ echo three 0 
three 0 
[email protected]:~$ vi test.sh 
[email protected]:~$ bash -x test.sh 
+ parameters='one two three' 
+ counter=0 
+ for option in '$parameters' 
+ eval one= 
++ one= 
+ ((counter=counter+1)) 
+ echo one 0 
one 0 
+ for option in '$parameters' 
+ eval two= 
++ two= 
+ ((counter=counter+1)) 
+ echo two 0 
two 0 
+ for option in '$parameters' 
+ eval three= 
++ three= 
+ ((counter=counter+1)) 
+ echo three 0 
three 0 

내가 그만큼이 문제를 이해할 누구든 그것을 설명 생각하지만, 나는 위해 더 많은 텍스트를 추가해야하기 때문에 내가 이것을 쓰고이 제출 : 여기

parameters="one two three" 
counter=0 

    for option in $parameters 
    do 
    eval $option=${args[$counter]} 
    ((counter = counter + 1)) # If you do ((counter++)) it fails the first iteration, weird. 
    echo $option $? 
    done 

무슨 뜻인지입니다 선.

+0

아니,하지만 첫 번째 반복은'당신의 스크립트를 설정하면 -e' 설정하고 '나는 할, 그들은 중지처럼 -o pipefail'를 설정하는 것이 의미 종료 한 코드를 제공합니다 달리는. 그 외에는 모두 좋다. – Ulukai

+0

여기에 인수 목록을 반복하는 많은 나쁜 습관이 있습니다. 'eval'을 사용하고 for-loop 변수 내용을 사용합니다. – Inian

+0

일련의 매개 변수를 반복해야하고 매개 변수에 제공된 인수에서 값을 할당해야하므로 평가 및 반복의 특정 순서가 필요합니다. for 루프. 특정 세부 사항에 대한 답변을 원했기 때문에 모든 세부 사항을 제공하고 싶지는 않았지만이 일을 더 잘 수행하는 방법을 알고 있다면이 질문의 범위를 벗어난 경우에도 항상 더 나은 방법을 배우는 데 열중합니다.) – Ulukai

답변