adsense_in_article_test


[bash: if] if 조건문에서 대괄호([ ]) 사용 리눅스 bash script

if 조건문에서 조건식을 적용할 때 대괄호(bracket) 하나만 쓸 수도 있고([ 조건식 ]) 대괄호 두개를 쓸 수도 있는데([[ 조건식 ]]), 일단 결과는 동일하게 나온다.

num=1
# 대괄호 하나
if [ $num -eq 1 ]
then echo "num is 1"
fi

# 대괄호 두개 (기능은 위의 구문과 동일)
if [[ $num -eq 1 ]]
then echo "num is 1"
fi


결과는 동일하지만 실행되는 방식은 다르다. 대괄호 하나인 경우는 별도의 프로세스를 실행한다. 즉, /usr/bin/[ 이 파일을 실행하여 조건식의 결과를 얻는 것이다. 반면에 대괄호 두개는 bash 자체적으로 내장된 기능을 사용하는 것이다. 따라서 별도의 프로세스를 실행하지 않는다.

간단한 스크립트에서는 전혀 상관이 없으나, 수많은 반복 작업을 해야 하는 상황이라면 별도의 프로세스를 사용하지 않고 내장된 기능을 쓰는 것이 조금 더 시간을 단축시킬 수 있지 않을까 싶다.

대괄호 두개를 쓸 경우 또 한가지 장점은, 조건식이 두개 이상 있어서 AND/OR 연산을 할 때 보기가 좀 더 편하다는 것이다.

num=1
name="john"

# 조건식: num=1 AND name="john"
if [ $num -eq 1 -a $name = "john" ]
then echo "$num: $name"
fi

# 대괄호 두개 사용
if [[ $num -eq 1 ]] && [[ $name = "john" ]]
then echo "$num: $name"
fi


대괄호 두개를 쓰면 각 조건식과 AND/OR 연산자가 대괄호에 의해 명확하게 분리되어 보이기 때문에 읽기가 훨씬 수월하다.



덧글

  • WSID 2014/12/19 16:36 # 답글

    [ ] 한개짜리는 배운적이 있는데, 두개는 처음보는군요..
    좋은 팁 잘 보고 갑니다. 'u'
  • 반달가면 2014/12/19 20:59 #

    한개짜리의 개선된 버전 정도 되는 듯합니다. 아주 오래된 shell에서는 대괄호 두개는 인식하지 않을 수도 있는 모양이더군요.

    /usr/bin 디렉토리에 가 보면 실행파일중에 이름이 대괄호([)인 것이 있습니다. 스크립트에서 대괄호 한개를 쓰면 이 파일을 실행해서 결과값을 가져오는 모양입니다. 두개를 쓰면 bash 자체에서 처리하구요.
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.



통계 위젯 (화이트)

23178
2704
2506813

2019 대표이글루_IT

B-Side