Extrai o nome do arquivo e substitui

0

Estou extraindo a parte do nome do arquivo de um caminho completo da seguinte forma:

PATH=/a/b/c/foo.o  #1
BASE=${PATH##*/}   #2
BASE=${BASE/%.o/-1234.o}   #3
echo "$BASE"  

Existe uma maneira de mesclar # 2 e # 3? Sempre que tentei obtive algum tipo de erro bad substitution do bash

    
por Jim 04.10.2017 / 09:53

2 respostas

2

Sim, você não pode aninhar as substituições, pois ambas exigem um nome de variável.

Você pode fazer isso em uma chamada para basename :

base="$( basename "$pathname" .o )-1234.o"

O segundo argumento para basename é um sufixo que será removido da string dada.

Observe também que usar letras maiúsculas PATH como uma variável em um shell script é uma idéia muito ruim , já que essa variável é usada pelo shell para encontrar utilitários externos.

Use nomes de variáveis em minúsculas em scripts. Isso ajuda a evitar confrontos com variáveis de shell e variáveis de ambiente que o shell está usando para outras coisas.

    
por 04.10.2017 / 09:57
0

No caso, se a extensão do arquivo é desconhecida (dinâmica) - alternativa sed :

p="/a/b/c/foo.txt"
p=$(sed -E 's#.*/([^/]+)(\..*)$#-1234#' <<< "$p")

echo "$p"
foo-1234.txt
    
por 04.10.2017 / 10:24