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 .