bash script2022. 8. 5. 14:58

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/531206

 

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 연산자가 대괄호에 의해 명확하게 분리되어 보이기 때문에 읽기가 훨씬 수월하다.

 

728x90
Posted by 반달가면