Quando %
é usado no padrão ${variable%substring}
, ele retornará o conteúdo de variable
com a menor ocorrência de substring
excluída da parte de trás de variable
.
Esta função suporta padrões curinga - é por isso que aceita asterisco como um substituto para zero ou mais caracteres.
Deve-se mencionar que isso é específico do Bash - outros shells linux não precisam necessariamente conter essa função.
Se você quiser saber mais sobre manipulação de string no Bash, sugiro que leia este página. Entre outras funções úteis, por exemplo, explica o que faz %%
:)
Edit: Esqueci de mencionar que quando é usado no padrão $((variable%number))
ou $((variable1%$variable2))
, o caracter %
funcionará como operador de modulo. DavidPostill tem links de documentação mais específicos em sua resposta.
Quando %
é usado em contextos diferentes, deve ser reconhecido apenas como caracteres regulares.