Bash에서 단일 대괄호 "["를 사용하여 하위 문자열을 확인하는 방법은 무엇입니까? [복사]

Bash에서 단일 대괄호 "["를 사용하여 하위 문자열을 확인하는 방법은 무엇입니까? [복사]

입력 매개변수에 특정 하위 문자열이 포함되어 있는지 감지하고 싶습니다.

다음 스크립트를 시도했습니다.

#1:

#!/bin/sh

if  [ $1 = *abc* ]
then
    echo contains abc
else
    echo not contains abc
fi

#2:

if  [ "$1" = "*abc*" ]
then
    echo contains abc
else
    echo not contains abc
fi

#삼:

if  [ "$1" = *"abc"* ]
then
    echo contains abc
else
    echo not contains abc
fi

#1~#3 모두 작동하지 않습니다.

그러나 다음은 [[쉽게 작동할 수 있습니다.

#4:

if  [[ $1 = *"abc"* ]]
then
    echo contains abc
else
    echo not contains abc
fi

#5:

if  [[ $1 = *abc* ]]
then
    echo contains abc
else
    echo not contains abc
fi

그럼 싱글도 제작 가능할까요 [?

1 - 2021년 9월 21일 오전 10:55 추가됨

방금 매우 유용한 스레드를 찾았습니다.

Bash 연산자 [[ vs [ vs ( vs ((?

답변1

[[내장 쉘. 이는 [실행 파일인 보다 일반적인 버전입니다 /usr/bin(참조:문서 및 man페이지test상세 사항은).

[휴대성이 뛰어나고 [[다재다능한 것이 일반적으로 사용해야 하는 변형입니다.

if  [[ $1 == *"abc"* ]]; then
    echo "substring present"
else
    echo "substring not present"
fi

하위 문자열을 테스트하는 또 다른 좋은 방법은 정규식 연산자를 사용하는 것입니다.

if [[ "$1" =~ .*"abc".* ]]; then
    echo "contains"
else
    echo "doesn't contain"
fi

다음 표현식 =~정규식와일드카드 뿐만이 아닙니다.


부분 문자열을 확인하는 또 다른 방법은 다음을 사용하는 것입니다 case.

case $1 in
    *"abs"*)
        echo "substring present"
        ;;
    *)
        echo "substring not present"
        ;;
esac

grep또는 CPH가 그의 게시물에서 설명하는 대로 를 사용할 수 있습니다 . 하지만 꼭 사용하셔야 합니다여기 - 문서:

if grep -q "abc" <<< "$STR"; then
    echo "substring present"
else
    echo "substring not present"
fi

답변2

단일 대괄호를 사용하려는 이유가 있나요?

더 간단한 방법은 다음과 같습니다.

if echo "$1" | grep 'abc' > /dev/null; then
    # Do if true substring found
else
    # substring not found
fi

이 명령에 익숙하지 않은 경우에는 grep사용자가 제공한 인수/값에 대한 문자열을 검색합니다. 해당 플래그를 사용하려면 대소문자를 무시할 수 -i있으며 위의 경우 매개변수 "$1"에서 소문자 "abc"를 구체적으로 찾습니다.

관련 정보