쉘에서 와일드카드 문자열을 일치시키는 데 문제가 있습니다 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 *
(따옴표 없이) 동일한 결과를 가진 다른 변형을 시도했습니다.
sh
Case 문에서 와일드카드 문자열을 일치시키기 위해 쉘을 사용하는 방법은 무엇입니까 ?
이것은 작동하지만 확장이 잘 되지 않습니다.
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:
.