Linux

Bash 스크립트에서 if문 대괄호 한 개와 두 개의 차이점

Tech Energy 2024. 10. 10. 10:50
728x90
반응형

Bash 스크립트에서 if문 대괄호 한 개와 두 개의 차이점

 

Bash 스크립트에서 if 문은 조건을 판단할 때 자주 사용되며, 이때 대괄호를 이용하여 조건식을 작성합니다. 하지만 대괄호가 한 개일 때 ([ ])와 두 개일 때 ([[ ]])는 기능적으로 차이가 있습니다. 이 포스팅에서는 그 차이점과 각각의 사용 사례를 자세히 설명해보겠습니다.

 

대괄호 한 개 [ ]의 의미

대괄호 한 개인 [ ]POSIX 표준test 명령어를 활용한 기본적인 조건식을 의미합니다. 이는 대부분의 쉘에서 지원하는 방식으로, 단순한 문자열 및 숫자 비교, 파일 존재 여부 등의 검사를 수행할 때 사용됩니다.

 

예시


if [ "$var" == "value" ]; then
    echo "Value matches"
fi

 

주요 특징

  • 공백 처리: 대괄호 안의 연산자와 피연산자 사이에는 반드시 공백이 있어야 합니다.
  • 숫자 비교: 숫자 비교는 -eq, -ne, -lt, -gt 등의 연산자를 사용해야 합니다.
  • 제한된 논리 연산: &&|| 같은 복잡한 논리 연산을 수행할 때 제약이 있습니다.

 

숫자 비교 예시


if [ "$num" -eq 10 ]; then
    echo "Number is 10"
fi

 

대괄호 두 개 [[ ]]의 의미

대괄호 두 개인 [[ ]]Bash 확장 조건식으로, 더 강력한 기능을 제공합니다. 이는 POSIX 표준이 아닌 Bash 고유의 기능으로, 더 복잡한 조건 검사나 패턴 매칭을 할 수 있습니다.

 

예시


if [[ "$var" == "value" ]]; then
    echo "Value matches"
fi

 

주요 특징

  • 유연한 공백 처리: [ ]에 비해 연산자와 피연산자 사이에 공백이 없어도 동작합니다.
  • 논리 연산자 사용 가능: &&, || 같은 논리 연산을 쉽게 사용할 수 있습니다.
  • 패턴 매칭 지원: =~ 연산자를 사용하여 정규식을 활용한 패턴 매칭이 가능합니다.

 

논리 연산자 예시


if [[ "$var" == "value1" || "$var" == "value2" ]]; then
    echo "Value matches value1 or value2"
fi

 

정규식 매칭 예시


if [[ "$var" =~ ^[0-9]+$ ]]; then
    echo "Variable is a number"
fi

 

차이점 요약

특성 [ ] (대괄호 한 개) [[ ]] (대괄호 두 개)
표준 POSIX 표준 Bash 확장
논리 연산자 제한적 (-a, -o 등 사용) 자유롭게 사용 가능
패턴 매칭 지원 불가 가능 (=~ 연산자)
숫자 비교 -eq, -ne 사용 직관적인 비교 가능
공백 처리 매우 엄격 덜 엄격

 

결론

Bash 스크립트에서 대괄호 한 개 ([ ])와 두 개 ([[ ]])는 각각 다른 방식으로 조건식을 처리합니다. 기본적인 POSIX 표준을 따르는 [ ]는 비교적 제한적이며, 복잡한 조건을 처리하기에 불편할 수 있습니다. 반면에, Bash 고유의 [[ ]]는 더 강력하고 유연한 기능을 제공하므로 복잡한 조건 검사를 작성할 때 유용합니다.

따라서 간단한 비교에는 [ ]를 사용할 수 있지만, 논리 연산자나 패턴 매칭을 포함한 복잡한 조건이 필요할 때는 [[ ]]를 사용하는 것이 좋습니다.

728x90
반응형