2013-07-19 5 views
0

코드> 다른 것은 첫째 ELIF로 건너 뜁니다.배쉬 경우 - -> 다음 경우

+1

기능이 필요한 것 같습니다. –

+2

어떻게 든이 블록을 벗어나는 것은 나쁜 사례입니다.이 경우 어떤 종류의 심각한 스파게티 코드로 이어질 것입니다. 함수를 작성하고 두 위치에서 호출하십시오. – Buggabill

+6

'if cond1 && cond2, elif cond3'? – fedorqui

답변

1

아래 코드에서 elif cond3 이후에 elif이 있으면 무엇이든간에 elif quux...은 자리 표시 자입니다.

당신은

을 건너 뛰는에 cond3을 테스트 할 필요가없는 경우 (당신이 cond3이 거짓 인 경우에도, 당신은 건너 뛸 때의 코드를 실행하려는입니다.)

를 @에 의해 제안 @의 fedorqui의 제안이 작동하는 곳

foo() { 
    # do work 
} 

if cond1; then 
    if cond2; then 
    ... 
    else 
    foo 
    fi 
elif cond3; then 
    foo 
elif quux... 

는 또한 : code4me, 당신은 기능을 사용할 수

if cond1 && cond2; then 
    ... 
elif cond3; then 
    # do work 
elif quux... 

당신이

논리가 따라하기 어렵게 도착을 건너 뛰는에 cond3을 테스트 할 수 필요성을 합니다. 나는 당신이 그 경우에 실행됩니다 어떤 코드에 대한 자리 표시 자로 doX, doYdoZ을 추가 한

if [cond1] 
then 
    if [cond2] 
    then 
     doX 
    else 
     skip to elif 
    fi 
    doY 
elif[cond3] 
then 
    doZ 
fi 

:

foo() { 
    # Note the condition is tested here now 
    if cond3; then 
    # do work 
    fi 
} 

if cond1; then 
    if cond2; then 
    ... 
    else 
    foo 
    fi 
else 
    # This code is carefully constructed to ensure that subsequent elifs 
    # behave correctly 
    if ! foo; then 
    # Place the other elifs here 
    if quux... 
0

그래서 여기에 코드입니다.

  • : [cond1]이 사실이고 [cond2][cond1]이 사실이고 [cond2]
  • doZ 때 중 하나를 실행에 해당하는 경우
  • doY 실행에 해당하는 경우

    • doX 실행 : 그래서,이 있음을 의미 [cond1]이 참이고 [cond2]이 거짓이고 [cond3]이 참일 경우
    • [cond1]는 거짓과 [cond3]이이 코드를이 대신 같은 기록 될 수 있다는 것을 의미한다

사실이다 :

if [cond1] && [cond2] 
then 
    doX 
    doY 
elif [cond3] 
    doZ 
fi 

편집 : @fedorqui 실제로 주석이 제안 것 같습니다.

0

첫 번째 if 섹션의 중간에서 코드를 실행하기를 원한다고 elif이 무엇을하는지 알기가 어렵습니다. 그 부분이 elif 일 필요가있는 부분입니까?

그렇지 않은 경우 if 문을 코드화하여 condition2을 고려해 볼 수 있습니다. 모두 조건 1조건 2은 사실이 아니다 해당하는 경우

if [ condition1 -a ! condition2 ] 
then 
    .... 
elif [ condition3 -o condition1 ] 
    .... 
fi 

이제 if 절은 실행됩니다. else 절의 내부에서 조건 2을 확인할 필요가 없습니다. 중 하나조건 3이이 참 또는조건 1에 해당하는 경우 귀하의 elif 절에서

, 당신은 실행됩니다. 기본적으로 조건 1이 참일 경우에만 실행됩니다. 조건 2도 참입니다. 그렇지 않으면 if 절을 실행했을 것입니다. 그런데

, 답변 내가 준 것을 거의 경기의 일부. 그러나 그들은 elif 조건에 or 절을 추가해야합니다. 조건 1이 참일 경우 조건 2이 참이지만 조건 3이 거짓입니까? 그 elif 절을 실행하고 싶습니다. 권리?