본문 바로가기
프로그래밍/shellscript

[쉘 스크립트] [ [[ 차이점 대괄호 1개와 2개의 차이점

by IT맥구리나스 2022. 6. 22.

어쩌다 생긴 의문

쉘 스크립트 [ [[ 차이점

쉘 스트립트 이중 대괄호 단일 대괄호

쉘스크립트에서 많이 쓰는 if문.. 일반적으로 if [ ] 로 대괄호 1개를 써왔다.

어쩌다가 변수의 값이 포함된 내용중 xxx 문자가 포함되면 참이라는 구문을 만들어야해서 구글에 검색해봤는데

아래와 같이 표기 하더라

#!/bin/bash
str='This is the shell script example.'

if [[ "$str" == *shell* ]]; then
  echo "It contains 'shell'"
fi

대괄호가 두개인 것이다.

한개로는 안될까?

#!/bin/bash
str='This is the shell script example.'

if [ "$str" = *shell* ]; then
  echo "It contains 'shell'"
fi

구글에 검색해보니

[ 는 sh기반 [[ bash기반으로 동작하고 동작하는 차이가 있다.(그렇다고 /bin/sh에 동작이 안되는것도 아녔음)

그리고 [[(대괄호 두개) 가 좀더 직관적이라는 것이다. 개선된 버전이라고 생각하면 되겠다.

 

가장 큰 개선점이라고 한다면

  • 대괄호 안에 && ||를 같이 쓸 수 있는 것
  • 쌍따옴표를 넣지 않아도 되는 것
  • 패턴매칭이 가능한 점
#!/bin/sh
str='This is the shell script example.'
str2='seo banana is test'

if [[ $str = *shell || $str2 = *banana* ]]; then
  echo "It is true"
else
  echo "It is false"
fi

## 아래 구문은 에러 발생함 대괄호 안에 || 연산을 못함
if [ '1' = '1' || '2' = '2' ]; then
  echo "It is true"
else
  echo "It is false"
fi

 

참고

https://stackoverflow.com/questions/3427872/whats-the-difference-between-and-in-bash

반응형

댓글