O que um hash após um nome de variável faz como um operador no bash?

2

Eu encontrei este código:

EXTENSION="${i#*=}"

O que ele faz é pegar a variável $i , que é um argumento para o script e copia tudo depois do caractere = . Então, se eu fizer algo como myscript.sh -e=wow , copie wow para $EXTENSION . Mas eu quero saber o que os símbolos #*= significam nesta ordem? Parece que #* é junto a cópia depois e = é o caractere após o qual copia, ou é mais complexo?

    
por IcyIcyIce 06.12.2015 / 04:56

2 respostas

6

Esse é um exemplo de remoção de prefixo . A forma geral é:

 ${variable#pattern}

que remove a correspondência mais curta para o glob pattern do início de variable . No seu caso, pattern consiste em (a) * que corresponde a zero ou mais de qualquer caractere e (b) = que corresponde apenas a = .

Veja man bash para mais informações.

Exemplo

$ i='ab=cd'
$ echo "${i#a}" 
b=cd
$ echo "${i#*=}" 
cd
    
por John1024 06.12.2015 / 04:58
5
  

Manual de referência do bash

     

3.5.3 Expansão do Parâmetro do Shell

     

[…]

${parameter#word}
     

A palavra é expandida para produzir um padrão, assim como na expansão de nome de arquivo (consulte Expansão do nome de arquivo . Se o padrão corresponder ao   início do valor expandido do parâmetro, então o resultado do   expansão é o valor expandido do parâmetro com o mais curto   padrão de correspondência […] excluído.

Exemplo

$ i='ab=cd'
$ echo "${i#a}" 
b=cd
$ echo "${i#*=}" 
cd

Desprezado roubado da resposta de João

    
por David Foerster 06.12.2015 / 05:01