HOWTO · Bash

Bash의 문자열 비교 연산자

이 기사에서는 if 문을 사용하여 Bash에서 문자열 비교를 설명합니다.

이 페이지의 내용

Bash의 [ 명령을 사용하는 if 문으로 따옴표로 묶은 두 문자열의 값이 같은지 확인할 수 있습니다. [ "$first" = "$second" ]에서 [는 명령 이름이며, 따옴표로 묶인 값과 =, 닫는 ]는 각각 별도의 인수입니다. Bash가 각 인수를 따로 전달하도록 그 사이에 공백을 둡니다.

Bash에서 if로 문자열 비교하기

다음 완전한 예제는 두 문자열 변수를 비교하고 값이 같으면 메시지를 출력합니다. 다른 문자열을 비교하려면 두 값 중 하나를 바꾸면 됩니다.

first="Hello"
second="Hello"
if [ "$first" = "$second" ]; then
    echo "Strings are equal"
else
    echo "Strings are different"
fi

예제를 실행했을 때 표준 출력은 다음과 같습니다.

Strings are equal

비교는 Bash의 [ 명령이 처리합니다. 명령이 성공하면 if가 첫 번째 분기를 실행하고, 그렇지 않으면 else 분기를 실행합니다. 각 변수 확장을 따옴표로 묶으면 값에 공백이 있거나 값이 설정되지 않은 경우에도 각각 하나의 테스트 인수로 유지됩니다. 위에 표시된 실행 결과는 Strings are equal이며, 이 출력 문구는 변경되지 않고 영어로 표시됩니다. 이 값에서는 어떤 분기가 실행되는지 확인할 수 있습니다.

값이 스크립트의 앞선 단계에서 정해진다면 조건문 앞에서 변수를 설정합니다. first="Hello there"처럼 대입문의 = 앞뒤에는 공백을 넣지 않습니다. 비교 연산자 앞뒤의 공백은 테스트 안에 둡니다. 따옴표는 각 확장을 하나의 인수로 묶지만 비교되는 값에는 포함되지 않습니다. 비교는 대소문자와 앞뒤 공백을 포함한 전체 문자열을 확인하므로 Hello와 hello는 서로 다른 값입니다.

문자열이 같은지 비교할 때 =와 == 사용하기

[ ... ] 안에서는 두 문자열이 같은지 확인할 때 =를 사용합니다. Bash는 이 명령에서 문자열 비교에 ==도 허용하므로 [ "$first" == "$second" ]도 사용할 수 있습니다. 두 연산자는 좌우의 값을 비교합니다. 반면 first="Hello"의 대입 연산자는 변수에 값을 저장합니다.

연산자 양쪽에 공백을 둡니다. [ "$first" = "$second" ]에서 [는 명령 이름이고, 따옴표로 묶인 각 값과 연산자, 닫는 ]는 별도의 인수입니다. 공백은 셸이 인수의 경계를 구분하는 데 필요합니다. 예를 들어 [ "$first"="$second" ]는 두 값과 같은 연산자를 전달하는 대신 테스트할 비어 있지 않은 문자열 하나를 전달하므로 의도한 비교가 이루어지지 않습니다.

이 Bash 테스트에서 일반적인 문자열 동등성 비교에는 =가 가장 명확하며 ==도 사용할 수 있습니다. 한 가지 형식을 골라 스크립트 전체에서 일관되게 사용하고, 두 비교 연산자를 변수 대입에 쓰는 =와 혼동하지 마세요. 두 값이 정확히 일치할 때만 조건이 참입니다. 대소문자를 무시하거나 앞뒤 공백을 제거해야 한다면 먼저 값을 변환한 뒤 결과 문자열을 비교하세요. 동등성 테스트 자체는 값을 정규화하지 않습니다.

!=로 서로 다른 문자열 판별하기

값이 서로 다른지 확인하려면 같은 위치에 !=를 사용합니다. 다음 독립 예제는 두 값에 맞는 분기를 출력합니다.

first="Hello"
second="World"
if [ "$first" != "$second" ]; then
    echo "Strings are different"
else
    echo "Strings are equal"
fi
Strings are different

문자열이 다르면 then 분기가 실행되고, 그렇지 않으면 Bash가 else를 실행합니다. =를 사용할 때와 마찬가지로 두 값을 모두 따옴표로 묶고 != 양쪽의 공백을 유지합니다. 사용자 입력이나 명령 출력에 이 패턴을 적용하려면 먼저 각 값을 변수에 저장한 다음 필요한 조건에 맞는 연산자로 변수를 비교합니다.

두 이름이나 설정 값이 일치하지 않는다고 알리는 것처럼, 다음 동작이 변경 여부에 따라 달라질 때 이 형식을 사용합니다. else 분기에는 반대 상황에서 수행할 동작을 넣어 두면 스크립트를 읽는 사람이 두 결과에 대한 처리를 모두 알 수 있습니다. 동등성 비교와 마찬가지로 따옴표는 공백이 포함된 값을 하나의 테스트 인수로 유지합니다. 연산자를 두 따옴표로 묶인 값 사이에 두고 마지막 ] 앞에도 공백을 남겨 Bash가 예상하는 인수 구조를 유지하세요.