programing

Bash의 조건부로 "아무것도 하지 않음"을 의미하는 명령어는 무엇입니까?

iphone6s 2023. 4. 27. 21:57
반응형

Bash의 조건부로 "아무것도 하지 않음"을 의미하는 명령어는 무엇입니까?

때때로 조건을 만들 때, 나는 아무것도 하지 않는 코드가 필요합니다. 예를 들어, 여기서, 나는 Bash가 다음 때 아무것도 하지 않기를 원합니다.$a"10"보다 큰 경우, "1"을 인쇄합니다.$a는 "5"보다 작으며, 그렇지 않으면 "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 [ "$a" -le 5 ]; then
    echo "1"
elif [ "$a" -lt 10 ]; then
    echo "2"
fi

no-op 명령과 관련된 원래 질문에 답하지는 않지만, "이 분기에서 나는 아무것도 하지 않으면 안 된다"고 생각하는 많은 (대부분은 아니더라도) 문제는 이 분기가 발생하지 않도록 로직을 재구성하는 것만으로 무시할 수 있습니다.

OPs 예제를 사용하여 일반적인 규칙을 제공하려고 합니다.

$a가 "10"보다 클 때는 아무것도 하지 않습니다. $a가 "5"보다 작으면 "1"을 인쇄하고, 그렇지 않으면 "2"를 인쇄합니다.

우리는 지점을 피해야 합니다.$a10개 이상을 얻음, 그래서.$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 구조조정이 확실히 더 낫지만, 나는 아무것도 하지 않는 방법을 찾는 모든 사람들에게 일반적인 규칙을 주고 싶었습니다.)

대신 :, true, false 사용합니다.

echo -n "" 

터미널의 빈 줄을 피합니다.

언급URL : https://stackoverflow.com/questions/17583578/what-command-means-do-nothing-in-a-conditional-in-bash

반응형