본문 바로가기

[OS]Operating System/[Linux]

[Linux] shell code - [], [[]], (), (()) 차이

728x90
반응형

예를 들어 shell script에서 if문을 사용할 때, 일반적으로 []를 주로 사용했을 것이다.
결론을 먼저 말하자면 []는 sh 기반이고, [[]]는 bash 기반으로 동작하는 차이가 있다.
또한 []는 옛날 리눅스 환경의 잔해이다.
[[]][]의 개선된 버전으로, 좀 더 직관적으로 표현하는 방식이 [[]]이다.

 

차이점

[] 표현 [[]] 표현
바이너리 처럼 작용한다. bash에 따라 다르다.
기본적으로 'not'연산자를 지원하지 않는다.
단일 조건만 지원한다.
대괄호 내에서 논리 연산자를 사용할 수 있다.
test와 동의이다. 새롭게 개선된 버전이며, 프로그램이 아닌 키워드이다.

 

개선점

  • 대괄호 안에 &&, ||와 같은 and, or 조건을 사용할 수 있다.
  • 큰따옴포 ""를 사용하지 않아도 된다.
  • 정규 표현식 사용시 패턴 매칭이 가능하다.

잘못 사용된 예

if [ '1' = '1' || '2' = '2' ]; then
  echo "It is true"
else
  echo "It is false"
fi

위의 코드 실행시 에러가 발생된다. 대괄호 하나짜리 안에는 || 연산을 하지 못한다.

 

따라서 기본적으로 이중 대괄호를 쓰는 편이 좋다.

 


Reference

반응형

'[OS]Operating System > [Linux]' 카테고리의 다른 글

[Linux] retry logic in script  (0) 2023.06.13
[Linux] bash shell - 조건문 사용법  (0) 2023.06.13
[Linux] shell script - python exit code  (0) 2023.04.30
[Linux] $?의 의미  (0) 2023.04.30
[Linux] IF문  (0) 2023.04.30