Eu estou tentando definir uma variável em um script sh para os últimos 3 caracteres do nome base de um arquivo (por nome base, quero dizer, sem o caminho e sem o sufixo). Consegui fazer isso, mas, por pura curiosidade, estou me perguntando se existe um comando mais curto e único que eu possa usar. Originalmente eu tinha uma linha awk, mas era bastante longa. Atualmente, tenho esse script de duas linhas (assumindo que um nome de arquivo completo esteja $1):
filebase=`basename "$1"`
lastpart=`echo -n ${filebase%.*} | tail -c3`
Por exemplo, "/path/to/somefile.txt" termina com "ile" em $lastpart.
Posso de alguma forma combinar basenameo bit para separar o sufixo em um único comando e existe uma maneira de enviá-lo paratail (ou qualquer outra coisa que eu possa usar) sem usar um pipe? O sufixo é desconhecido, portanto não posso basear como parâmetro basename.
O objetivo principal não é tanto o mais curto possível, mas o mais legível possível. O contexto real de tudo isso é essa pergunta no Superusuário , onde estou tentando encontrar uma resposta razoavelmente simples.
twofuncionaria; a extensão disso seria .threeeu acho.
file.one.two.three? Você querileoutwo?