'리눅스 조건식 사용법'에 해당되는 글 1건

조건문을 사용할 때 문자열 비교 표현식 결과를 판단하기 위해서 싱글브라켓과 더블브라켓을 사용하는데, 그 차이를 정리한다.

참고로, 브라켓을 사용할 때는 시작 브라켓 다음에 반드시 공백이 있어야 한다. (문자열 비교시)싱글브라켓은 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 명령어와 싱글브라켓은 기능이 동일하며, 더블브라켓은 패턴매칭까지 지원한다.

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,