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 -bash: ${$1%.*}: bad substitution
uma mensagem de erro. No entanto, o mesmo funciona para variáveis de shell comuns em um script de shell, digamos, $x
em vez de $1
.bash_profile (acho que o mesmo acontece em .bashrc também).
O que há de errado e algum remédio?
Responder1
Solte o $
nome da variável anterior ( 1
) dentro da expansão do parâmetro:
name="${1%.*}"
ext="${1##*.}"
você já está se referindo à variável com a $
chave inicial anterior {
, não há necessidade de outra na frente do nome da variável.
Responder2
Se você tiver os comandos dirname
, basename
e awk
, talvez queira considerar esta 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"