[bash] Bash의 조건부에서 “아무것도하지 않는다”는 것은 어떤 명령입니까?

때로는 조건을 만들 때 아무 것도하지 않는 코드가 필요합니다. 예를 들어, 여기서 $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 구조 조정 이 더 낫지 만 모든 사람들이 아무것도하지 않는 방법을 검색하는 일반적인 규칙을 부여하고 싶었습니다.)


답변