SW/리눅스

Linux : Bash : String 문자열 비교 방법, 예제, 명령어

얇은생각 2021. 8. 22. 07:30
반응형

Bash 스크립트를 작성할 때 종종 두 문자열을 비교하여 동일한지 여부를 확인해야 합니다. 두 문자열의 길이가 같고 문자 시퀀스가 같으면 두 문자열이 동일합니다.

Bash의 문자열을 비교하는 방법에 대해 설명합니다.

 

 

Linux : Bash : String 문자열 비교 방법, 예제, 명령어

 

 

비교 연산자

비교 연산자는 값을 비교하고 참 또는 거짓을 반환하는 연산자입니다. Bash에서 문자열을 비교할 때 다음 연산자를 사용할 수 있습니다. 

string1 = string2 및 string1 == string2 - 피연산자가 같으면 equal 연산자가 true를 반환합니다.

= 연산자를 테스트 [명령]과 함께 사용합니다.

패턴 일치를 위해 == 연산자를 [[명령]과 함께 사용합니다.

string1 != string2 - 피연산자가 같지 않으면 부등식 연산자가 true를 반환합니다.

string1 = ~ regex - 왼쪽 피연산자가 오른쪽의 확장 정규식과 일치하면 regex 연산자는 true를 반환합니다.

string1 > string2 - 왼쪽 피연산자가 사전순(알파벳순)에 의해 정렬된 오른쪽보다 클 경우보다 큰 연산자는 true를 반환합니다.

문자열 1 < 문자열 2 - 오른쪽 피연산자가 사전순(알파벳순)에 의해 정렬된 오른쪽보다 클 경우 보다 작은 연산자는 true를 반환합니다.

-z 문자열 - 문자열 길이가 0인 경우 참입니다.

-n 문자열 - 문자열 길이가 0이 아닌 경우 참입니다.

 

다음은 문자열을 비교할 때 주의해야 할 몇 가지 사항입니다. 

이진 연산자와 피연산자 사이에는 공백을 사용해야 합니다.

항상 변수 이름 주위에 큰 따옴표를 사용하면 단어 분할 또는 글머리 기호 문제가 발생하지 않습니다.

Bash는 변수를 "type"으로 구분하지 않으며, 변수는 상황에 따라 정수 또는 문자열로 처리됩니다.

 

 

 

두 문자열이 같은지 확인

대부분의 경우 문자열을 비교할 때 문자열이 같은지 여부를 확인하려고 합니다.

다음 스크립트는 if 문과 test [ 명령을 사용하여 문자열이 = 연산자와 같은지 여부를 확인합니다.

#!/bin/bash

VAR1="Linuxize"
VAR2="Linuxize"

if [ "$VAR1" = "$VAR2" ]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

 

 

스크립트가 실행되면 다음 출력을 인쇄합니다.

Strings are equal.

 

 

다음은 사용자로부터 입력을 받아 지정된 문자열을 비교하는 또 다른 스크립트입니다. 이 예에서는 [[command and == 연산자]를 사용합니다.

#!/bin/bash

read -p "Enter first string: " VAR1
read -p "Enter second string: " VAR2

if [[ "$VAR1" == "$VAR2" ]]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

 

 

스크립트를 실행하고 메시지가 표시되면 문자열을 입력합니다.

Enter first string: jjeongil
Enter second string: Ubuntu
Strings are not equal.

 

 

또한 논리 및 &&gt; ||를 사용하여 문자열을 비교할 수 있습니다.

[[ "string1" == "string2" ]] && echo "Equal" || echo "Not equal"

# Not equal

 

 

문자열에 하위 문자열이 포함되어 있는지 확인

문자열에 하위 문자열이 포함되어 있는지 확인하는 방법은 여러 가지가 있습니다.

한 가지 방법은 하위 문자열을 모든 문자와 일치하는 별표 기호 *로 둘러싸는 것입니다.

#!/bin/bash

VAR='GNU/Linux is an operating system'
if [[ $VAR == *"Linux"* ]]; then
  echo "It's there."
fi

# It's there.

 

 

 

다른 옵션은 아래와 같이 regex 연산자 =~를 사용하는 것입니다.

#!/bin/bash

VAR='GNU/Linux is an operating system'
if [[ $VAR =~ .*Linux.* ]]; then
  echo "It's there."
fi

 

 

마침표 뒤에 별표(*)가 붙으면 새 줄 문자를 제외한 모든 문자와 0개 이상 일치합니다.

 

 

문자열이 비어 있는지 확인

변수가 빈 문자열인지 여부도 확인해야 하는 경우가 많습니다. -n 및 -z 연산자를 사용하여 이 작업을 수행할 수 있습니다.

#!/bin/bash

VAR=''
if [[ -z $VAR ]]; then
  echo "String is empty."
fi

# String is empty.

 

#!/bin/bash

VAR='Linuxize'
if [[ -n $VAR ]]; then
  echo "String is not empty."
fi

# String is not empty.

 

 

 

사례 연산자와 문자열 비교

테스트 연산자를 사용하는 대신 사례 문을 사용하여 문자열을 비교할 수도 있습니다.

#!/bin/bash

VAR="Arch Linux"

case $VAR in

  "Arch Linux")
    echo -n "jjeongil matched"
    ;;

  Fedora | CentOS)
    echo -n "Red Hat"
    ;;
esac

# jjeongil matched.

 

 

 

사전 비교

사전 비교는 문자열의 문자를 왼쪽에서 오른쪽으로 순차적으로 비교하여 두 문자열을 알파벳 순으로 비교하는 연산이다. 이런 종류의 비교는 거의 사용되지 않는다. 

다음 스크립트는 사전순으로 두 문자열을 비교합니다.

#!/bin/bash

VAR1="jjeonil"
VAR2="Ubuntu"

if [[ "$VAR1" > "$VAR2" ]]; then
    echo "${VAR1} is lexicographically greater then ${VAR2}."
elif [[ "$VAR1" < "$VAR2" ]]; then
    echo "${VAR2} is lexicographically greater than ${VAR1}."
else
    echo "Strings are equal"
fi

# Ubuntu is lexicographically greater than jjeonil.

 

반응형