때로는 조건을 만들 때 아무 것도하지 않는 코드가 필요합니다. 예를 들어, 여기서 $a
“10”보다 큰 경우 Bash가 아무 것도하지 않기를 원합니다. $a
“5”보다 작은 경우 “1”을 인쇄하고, 그렇지 않으면 “2”를 인쇄하십시오.
if [ "$a" -ge 10 ]
then
elif [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
그래도 오류가 발생합니다. 아무것도하지 않고 스크립트 속도를 늦추지 않는 명령이 있습니까?
답변
쉘에서 no-op 명령은 :
(콜론)입니다.
if [ "$a" -ge 10 ]
then
:
elif [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
로부터 bash는 설명서 :
:
(콜론)
인수를 확장하고 리디렉션을 수행하는 것 외에는 아무것도하지 마십시오. 반환 상태는 0입니다.
답변
아마도 다음 true
명령을 사용할 수 있습니다 .
if [ "$a" -ge 10 ]; then
true
elif [ "$a" -le 5 ]; then
echo "1"
else
echo "2"
fi
대안으로, 귀하의 예제 경우 (그러나 반드시 모든 곳은 아님) if / else를 다시 주문하는 것입니다.
if [ "$a" -le 5 ]; then
echo "1"
elif [ "$a" -lt 10 ]; then
echo "2"
fi
답변
no-op 명령과 관련하여 원래의 질문에 대답하지는 않지만 ” 이 지점에서 아무 것도 할 필요가 없다 “고 생각할 수있는 많은 (대부분은 아니지만) 문제 는 단순히이 지점을 얻 도록 논리 를 재구성하여 우회 할 수 있습니다. 발생하지 않습니다.
OPs 예제를 사용하여 일반적인 규칙을 제시하려고합니다.
$ a가 “10”보다 크면 아무 것도하지 말고 $ a가 “5”보다 작 으면 “1”을 인쇄하고, 그렇지 않으면 “2”를 인쇄하십시오
우리는 일반적인 조건이 조건에 따라 서로에게 적용될 수 $a
있기 때문에 10을 초과 하는 지점을 피해야합니다 $a < 10
.
일반적으로 X 일 때 아무 것도 말하지 않으면 X가 있는 지점 을 피하기 위해 문구 를 바꾸십시오 . 일반적으로 X를 무시하고 다른 모든 조건에 적용하여 회피를 수행 할 수 있습니다.
따라서 규칙이 적용된 OP 예제는 다음과 같이 재구성 될 수 있습니다.
if [ "$a" -lt 10 ] && [ "$a" -le 5 ]
then
echo "1"
elif [ "$a" -lt 10 ]
then
echo "2"
fi
$a < 10
조건의 모든 것을 묶는 위의 변형 일뿐입니다 .
if [ "$a" -lt 10 ]
then
if [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
fi
(이 특정 예제의 경우 @Flimzys 구조 조정 이 더 낫지 만 모든 사람들이 아무것도하지 않는 방법을 검색하는 일반적인 규칙을 부여하고 싶었습니다.)