Estou tentando corrigir meu primeiro script bash e, a certa altura, um nome de arquivo é passado para o script como $1
. 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 removo os últimos 4 caracteres para obter o nome do arquivo:
a="${1:0:-4}"
Mas 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?
Respostas:
A maneira usual de fazer isso no bash é usar a expansão de parâmetros. (Consulte a página de manual do bash e procure por "Expansão de parâmetros".)
A
%
indica que tudo o que corresponda ao padrão seguinte (.*
) a partir da direita, usando o jogo mais curto possível, deve ser excluída do parâmetro$1
. Nesse caso, você não precisa de aspas duplas (") em torno da expressão.fonte
${1%.*}
retornaráSomething.eng
. Se você deseja retirar tudo da direita,.
incluindo o.
, use${1%%.*}
, que retornaráSomething
.Se você conhece a extensão, pode usar o nome da base
fonte
Uma linha no Bash sem usar o nome de base :
fonte