Como extrair o nome do arquivo sem a extensão de um caminho completo?

7

Estou tentando corrigir meu primeiro script bash e, em determinado momento, um nome de arquivo é passado para o script como $1 . Eu preciso extrair o nome do arquivo sem a extensão.
Atualmente, estou assumindo que todas as extensões são três letras, então eu removo os últimos 4 caracteres para obter o nome do arquivo:

a="${1:0:-4}"

Mas eu preciso trabalhar com extensões com mais de três caracteres, como %~n1 no Windows.
Existe alguma maneira de extrair o nome do arquivo sem a extensão dos argumentos?

    
por user304822 20.03.2014 / 06:08

2 respostas

15

A maneira usual de fazer isso no bash é usar a expansão de parâmetro. (Veja a bash página man e procure por "Parameter Expansion".)

a=${1%.*}

O % indica que tudo que corresponde ao padrão a seguir ( .* ) da direita, usando a menor correspondência possível, deve ser excluído do parâmetro $1 . Nesse caso, você não precisa de aspas duplas (") ao redor da expressão.

    
por 20.03.2014 / 07:40
7

Se você conhece a extensão, pode usar o basename

$ basename /home/jsmith/base.wiki .wiki
base
    
por 02.05.2015 / 23:48