sh 쉘을 사용하여 Case 문의 와일드카드 문자열 일치

sh 쉘을 사용하여 Case 문의 와일드카드 문자열 일치

쉘에서 와일드카드 문자열을 일치시키는 데 문제가 있습니다 sh. 이 코드는 쉘의 일부이므로 configure.ac일반적으로 사용 가능한 가장 약한 쉘을 가져옵니다. Bash 쉘을 믿을 수 없습니다.

코드가 먼저 실행됩니다.

LDNAME=`basename "$LD"`

ld -m x86_64때로는 또는 같은 문자열이 표시되지만 친근한 표시 이름으로 ld -m elf64lppc사용하고 싶습니다 .ld

그런 다음 나는쉘 스크립트 bash에서 하위 문자열을 확인하는 방법은 무엇입니까?,쉘 스크립트에서 IF 조건의 하위 문자열 검사그리고if/else 및 와일드카드 비교사용 case설명:

case "$LDNAME" in
    "ld -m*") LDNAME=ld
    ;;
esac

문자열이 일치할 수 없으며 원래 문자열을 다시 가져옵니다. 나는 또한 ld -m *(따옴표 없이) 동일한 결과를 가진 다른 변형을 시도했습니다.

shCase 문에서 와일드카드 문자열을 일치시키기 위해 쉘을 사용하는 방법은 무엇입니까 ?


이것은 작동하지만 확장이 잘 되지 않습니다.

if test "$LDNAME" = "ld -m elf_x86_64"; then
   LDNAME=ld
fi
if test "$LDNAME" = "ld -m elf64lppc"; then
   LDNAME=ld
fi

답변1

이것은 작동합니다:

LDNAME="ld -m blah"
case "$LDNAME" in "ld -m"*) echo foo;; esac

와일드카드는 따옴표 없이 그대로 두어야 합니다 *. 그렇지 않으면 리터럴 문자로 처리됩니다.

그러나 실제로 그 이후의 내용을 삭제하려면 -m를 사용할 수 있습니다 LDNAME=${LDNAME%% -m*}.

LDNAME="ld -m blah"
LDNAME=${LDNAME%% -m*}
echo ":$LDNAME:"

주어진 :ld:.

관련 정보