Sinais de Porcentagem para o Shell Vars para Remover a Extensão [duplicado]

0
for file in *.pdf ; do
    newname=${file%\.\*}
done

Eu não entendo como o %\.* está removendo a extensão do arquivo, alguém pode me acompanhar.

    
por Johnny 20.05.2015 / 03:23

1 resposta

1

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 .

    
por 20.05.2015 / 06:14