A expansão de parâmetro Bash suporta várias modificações que pode fazer no valor enquanto expande uma variável. Um deles é ##
, que remove o prefixo mais longo de o valor que corresponde a um padrão (os padrões não são expressões regulares aqui).
Nesse caso, o padrão é *.
. Isso corresponde a zero ou mais caracteres seguidos por .
. ${x##*.}
significa remover toda a cadeia até o último caractere .
e deixar tudo depois desse ponto.
${1##*.}
significa fazer essa expansão usando o valor do primeiro parâmetro posicional, o que você normalmente acessaria com $1
. O resultado final de
echo "${1##*.}"
é então imprimir a parte do primeiro argumento do script que vem depois do último .
, que é a extensão do nome do arquivo.
Se o padrão não corresponder , o valor total da variável será expandido, como se você não tivesse usado o ##
. Nesse caso, se o argumento que você deu não tiver um .
, você poderá simplesmente retirá-lo novamente.
O Bash também suporta um único #
para desativar o menor prefixo correspondente e a mesma coisa com %
para corresponder ao final da string.