Corresponder cadeia com caracteres curinga na instrução case usando sh shell

1

Estou com problemas para corresponder a uma string com wilcard no shell sh . O código é parte de um configure.ac , de modo que normalmente fica disponível o shell lamest. Eu não posso contar com o shell Bash.

O código é executado pela primeira vez:

LDNAME='basename "$LD"'

E às vezes recebo uma string como ld -m x86_64 ou ld -m elf64lppc , mas quero apenas ld como um nome de exibição amigável.

Eu, então, executo uma pequena correção de acordo com Como verificar a substring no script de shell bash? , Subtring check na condição IF no shell script e comparação if / else com curinga usando um case declaração:

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

A string não corresponde e eu recebo a string original de volta. Eu também tentei ld -m * (sem aspas) e algumas outras variações com o mesmo resultado.

Como faço para combinar uma string wilcarded na instrução case usando sh shell?

Isso funciona, mas não é muito extensível:

if test "$LDNAME" = "ld -m elf_x86_64"; then
   LDNAME=ld
fi
if test "$LDNAME" = "ld -m elf64lppc"; then
   LDNAME=ld
fi
    
por Jeff Schaller 31.07.2018 / 23:35

1 resposta

4

Isso deve funcionar:

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

Você precisa deixar o caractere curinga * sem aspas, caso contrário, ele será considerado como um caractere literal.

Mas, na verdade, se tudo o que você quer é remover -m e qualquer coisa depois, você pode usar apenas LDNAME=${LDNAME%% -m*} .

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

:ld: .

    
por 31.07.2018 / 23:41