Bash if 문의 압축 표현식

Bash if 문의 압축 표현식

이것을 좀 더 간결하게 표현하려면 어떻게 해야 할까요?

if [[ $arg =~ ^[[:digit:]]+$ ]]; then 
  vb=$arg
else
  vb=1
fi   

답변1

명령문에 숫자만 포함되어 있으면 변수에 할당되고, $arg그렇지 않으면 에 할당됩니다.vb$arg1vb

따라서 독자가 확장 정규식을 해석하는 방법을 알고 있다고 가정하면 상당히 간결하고 무슨 일이 일어나고 있는지 명확합니다.

그것을 공식화하는 또 다른 방법은 다음을 사용하는 것입니다.

vb=1
[[ $arg =~ ^[[:digit:]]+$ ]] && vb=$arg

의견에서 제안한 것처럼 가독성이 떨어집니다.

코드를 작성하는 또 다른 방법은 테스트를 함수에 위임하는 것입니다.

is_whole_number () {
    [[ $1 =~ ^[[:digit:]]+$ ]]
}

if is_whole_number "$arg"; then
    vb=$arg
else
    vb=1
fi

더 많은 코드이지만 현실적으로 if는 정규식이나 쉘 스크립트에 익숙하지 않은 사람들도 명령문이 더 짧고 이해하기 쉽습니다.

관련 정보