루프에서 호출된 함수에서 "계속"을 반환합니다.

루프에서 호출된 함수에서 "계속"을 반환합니다.

저는 현재 서서히 통제 불능 상태가 되어가는 스크립트를 리팩토링하고 있습니다. 반복을 기능으로 분해하려고합니다. 그러나 루프에서 호출되는 반복 테스트가 있고 이 테스트가 continue.

쉘체크 라고

SC2104: In functions, use `return` instead of `continue`.

Shellcheck 위키에서는 이렇게 하지 말라고 나와 있습니다. 하지만 방법이 있나요?

아래는 예입니다:

#!/bin/sh

AFunction () {
    if [[ "${RED}" -lt 3 ]]; then
        echo "cont"
        continue
    else
        echo "nope"
    fi
}

for i in 1 2 3 4 5
do
    RED=${i}
    AFunction
    echo ${i}
done

출력은 다음과 같습니다.

cont
1
cont
2
nope
3
nope
4
nope
5

하지만 난 바란다

cont
cont
nope
3
nope
4
nope
5

지금까지 응답해 주신 모든 분들께 감사드립니다. 나는 꽤 가까워졌지만 이제 부수적인 문제가 있습니다. 그렇게 바라도 괜찮을까요?

@sudodus 답변과 @alecxs 팁을 조합하여 사용하는 경우. 함수가 끝나면 항상 0을 "반환"해야 합니까? 지금은 좋은 습관처럼 보이지만 명시적으로 수행하지 않으면 의미가 있습니까?

#!/bin/sh

AFunction () {
    ##Script doing loads of other stuff
    if [[ "${RED}" -lt 3 ]]; then
        echo "cont"
        ## This only happening because something has gone wrong
        return 1
    else
        echo "nope"
    fi
    ##Script doing loads of more stuff
}

for i in 1 2 3 4 5
do
    RED=${i}
    AFunction || continue
    echo ${i}
done

답변1

아래와 같은 매개변수와 함께 "return"을 사용할 수 있습니다.

#!/bin/bash

AFunction () {
    if [[ "${RED}" -lt 3 ]]; then
        echo "cont"
        return 1
    else
        echo "nope"
        return 0
    fi
}

for i in 1 2 3 4 5
do
    RED=${i}
    if AFunction
    then
    echo ${i}
    fi
done

답변2

#!/bin/sh

AFunction () {
    [ "${RED}" -lt 3 ]
}

for i in 1 2 3 4 5
do
    RED=${i}
    if AFunction
    then
      echo "cont"
    else
      echo "nope"
      echo ${i}
    fi
done

관련 정보