bash function: dividindo nome e extensão de um arquivo

1

Eu tenho a seguinte função split no meu arquivo .bash_profile.

function split {
   name="${$1%.*}"
   ext="${$1##*.}"
   echo filename=$name extension=$ext
}

Agora devo esperar que o comando split foo.bar me dê

filename=foo  extension=bar

Mas recebo a mensagem de erro -bash: ${$1%.*}: bad substitution . O mesmo, no entanto, funciona para a variável de shell usual em um script de shell, digamos $x em vez de $1 em .bash_profile (acho que o mesmo acontece no .bashrc também).

O que há de errado e algum remédio?

    
por hbaromega 28.09.2016 / 21:57

2 respostas

4

Elimine o $ que precede o nome da variável ( 1 ) dentro da expansão do parâmetro:

name="${1%.*}"
ext="${1##*.}"

você já está se referindo à variável com o $ precedendo a chave inicial { , não há necessidade de outra na frente do nome da variável.

    
por 28.09.2016 / 22:02
0

Se você tiver os comandos dirname , basename e awk , convém considerar essa definição de função

function split {

DIR=$(/bin/dirname "$1")
BASE=$(/bin/basename "$1")
EXT=$(echo "$BASE" | /usr/bin/awk -F. 'NF>1 {print $NF}')
NAME=${BASE%.$EXT}
echo directory=$DIR filename=$NAME extension=$EXT

}

split good.bye/data.txt
split good.bye/data
split data.txt
split good.bye/data.001.txt
split "good bye/data 001.txt"
    
por 28.09.2016 / 22:43

Tags