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
반응형