I don't understand how the
%\.*
is removing the file extension
Isso é porque não. :) O código escrito está errado, e não faz nada útil.
Há uma expansão de shell padrão ${variable%pattern}
, que leva $variable
e remove o bloco menor no final dele que corresponde a pattern
(há uma expansão semelhante ${variable%%pattern}
que remove a correspondência mais longa ). No entanto, pattern
é supostamente um shell glob, enquanto o autor do fragmento de código acima parece ter intencionado isso como uma expressão regular.
A forma correta é esta: ${file%.*}
. Funciona removendo tudo à direita do ponto mais à direita . Em contraste, ${file%%.*}
remove tudo à direita do ponto à esquerda . Por exemplo, se file=/some/very.long.directory.name/foo.pdf
, então ${file%.*}
se expande para /some/very.long.directory.name/foo
e ${file%%.*}
expande para /some/very
.