본문 바로가기
Old Posts/Linux

[Bash] 문자열 비교 방법

by A6K 2022. 12. 2.

리눅스 Bash 스크립트에서 문자열을 비교하고, 문자열을 자르는 방법에 대해서 알아보자.

문자열  비교 - 같은지 확인

Bash 스크립트에서 두 문자열을 == 연산으로 비교할 수 있다.

#!/bin/bash

str1="Hello"
str2="hello"

if [ $str1 == $str2 ];then
  echo "Equal"
else
  echo "Not equal"
fi

이 스크립트를 실행하면 다음과 같은 출력을 얻게 된다.

$ ./test.sh
Not equal

단순히 == 연산으로 두 문자열을 비교할 경우, 둘 중 하나가 빈 문자열일 때 에러가 발생한다. 예를 들어

#!/bin/bash

str1="Hello"
str2=""

if [ $str1 == $str2 ];then
  echo "Equal"
else
  echo "Not equal"
fi

결과는 다음과 같다.

$ ./test.sh
./test.sh: line 6: [: Hello: unary operator expected
Not equal

이런 에러를 방지하기 위해서는 == 연산으로 비교할 때 쌍 따옴표로 문자열 변수를 감싸주면 된다.

#!/bin/bash

str1="Hello"
str2=""

if [ "$str1" == "$str2" ];then
  echo "Equal"
else
  echo "Not equal"
fi

결과는 다음과 같다.

$ ./test.sh
Not equal

문자열 비교 - 문자열이 포함되어 있는지 확인

문자열의 포함관계를 확인하는 방법은 크게 두 가지가 있다.

우선 [[ "$str1" == *Hello* ]] 처럼 사용하면 str1 변수에 Hello 라는 문자열이 있는지 확인할 수 있다.

#!/bin/bash

str1="Hello, World"

if [[ "$str1" == *Hello* ]];then
  echo "contained"
else
  echo "Not contained"
fi

결과는 다음과 같다.

$ ./test.sh
contained

아니면 [[ "$str1" =~ "Hello" ]] 처럼 확인할 수도 있다.

#!/bin/bash

str1="Hello, World"

if [[ "$str1" =~ "Hello" ]];then
  echo "contained"
else
  echo "Not contained"
fi

결과는 다음과 같다.

$ ./test.sh
contained

문자열 비교 - 빈 문자열인지 확인

문자열의 길이가 0인지 확인하는 방법은 다음과 같다.

조건문에서 [ -z "$str" ] 을 이용하면 문자열이 빈 문자열인지 확인할 수 있다. -z 는 문자열의 길이가 0일 때 True를 리턴한다.

#!/bin/bash

str1=""

if [ -z "$str1" ];then
  echo "Empty"
else
  echo "Not empty"
fi

결과는 다음과 같다.

$ ./test.sh
Empty

혹은 -n 을 이용해도 된다. -n 은 반대로 문자열의 길이가 0이 아닐 때 True를 리턴한다.

#!/bin/bash

str1=""

if [ -n "$str1" ];then
  echo "Not empty"
else
  echo "Empty"
fi

결과는 다음과 같다.

$ ./test.sh
Empty

 

 

Bash 스크립트 작성 레퍼런스 포스트 모음

Bash 스크립트를 작성할 때 참고할 만한 포스트들을 모아봤다. Bash 문법 [Bash] 조건문 문법, 사용법 및 예제 [Bash] 반복문 문법, 사용법 및 예제 명령어 access curl compress, uncompress dd date df dir dirname du e

hbase.tistory.com

 

댓글