조건문을 사용할 때 문자열 비교 표현식 결과를 판단하기 위해서 싱글브라켓과 더블브라켓을 사용하는데, 그 차이를 정리한다.
참고로, 브라켓을 사용할 때는 시작 브라켓 다음에 반드시 공백이 있어야 한다. (문자열 비교시)싱글브라켓은 test와 같은 기능이다. "=" 와 "==" 는 둘다 동일비교이며, bash 버전에 따라 "=" 를 지원하지 않는다고 한다.(걍 문자열 비교는 무조건 == 를 쓰자) 표현식 판단결과가 0이면 true이며, 1이면 false이다.
참고로, "-eq" 는 문자열 비교시가 아니라 숫자 비교를 test를 사용하여 비교할 때 쓰는 비교문이다.
1. 테스트 스크립트
test.sh
#!/bin/bash
name=root
# 1. 정확한 문자열 매칭 테스트
# test, 싱글브라켓, 더블브라켓 모두 동일하다.
test $name = root
echo '$name = root >>> '$?
test $name == root
echo '$name == root >>> '$?
[ $name = root ]
echo '[ $name = root ] >>> '$?
[ $name == root ]
echo '[ $name == root ] >>> '$?
[[ $name = root ]]
echo '[[ $name = root ]] >>> '$?
[[ $name == root ]]
echo '[[ $name == root ]] >>> '$?
# 2. 패턴 매칭 테스트
# 싱글브라켓, test는 패턴매칭이 안된다.
# 더블브라켓은 패턴매칭이 된다.
test $name = [Rr]???
echo 'test $name = [Rr]??? >>> '$?
test $name == [Rr]???
echo 'test $name == [Rr]??? >>> '$?
[ $name = [Rr]??? ]
echo '[ $name = [Rr]??? ] >>> '$?
[ $name == [Rr]??? ]
echo '[ $name == [Rr]??? ] >>> '$?
[[ $name = [Rr]??? ]]
echo '[[ $name = [Rr]??? ]] >>> '$?
[[ $name == [Rr]??? ]]
echo '[[ $name == [Rr]??? ]] >>> '$?
2. 실행결과
./test.sh
$name = root >>> 0
$name == root >>> 0
[ $name = root ] >>> 0
[ $name == root ] >>> 0
[[ $name = root ]] >>> 0
[[ $name == root ]] >>> 0
test $name = [Rr]??? >>> 1
test $name == [Rr]??? >>> 1
[ $name = [Rr]??? ] >>> 1
[ $name == [Rr]??? ] >>> 1
[[ $name = [Rr]??? ]] >>> 0
[[ $name == [Rr]??? ]] >>> 0
3. 정리
test 명령어와 싱글브라켓은 기능이 동일하며, 더블브라켓은 패턴매칭까지 지원한다.
'Linux' 카테고리의 다른 글
[LINUX] 쉘스크립트 디버깅 방법 (1) | 2022.10.06 |
---|---|
[LINUX] 정수 비교연산시 let 과 test 의 차이 (0) | 2022.08.17 |
[LINUX] 헷갈리는 표현식 및 정수연산방법 (0) | 2022.08.09 |
[LINUX] 쉘스크립트 위치파라미터 $*와 $@의 차이 (0) | 2022.08.09 |
[LINUX] 리눅스 쉘스크립트 정수 산술 방법 정리 (0) | 2022.08.02 |