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