리눅스 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
댓글