
Tengo la siguiente función split
en mi archivo .bash_profile.
function split {
name="${$1%.*}"
ext="${$1##*.}"
echo filename=$name extension=$ext
}
Ahora debo esperar que el comando split foo.bar
me dé
filename=foo extension=bar
Pero recibo -bash: ${$1%.*}: bad substitution
un mensaje de error. Sin embargo, lo mismo funciona para la variable de shell habitual en un script de shell, digamos $x
en lugar de $1
en .bash_profile (creo que lo mismo ocurre también en .bashrc).
¿Qué pasa y algún remedio?
Respuesta1
Suelte el $
nombre de la variable anterior ( 1
) dentro de la expansión del parámetro:
name="${1%.*}"
ext="${1##*.}"
Ya te estás refiriendo a la variable con la $
llave inicial anterior {
, no es necesario poner otra delante del nombre de la variable.
Respuesta2
Si tiene los dirname
comandos basename
y awk
, es posible que desee considerar esta definición de función
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"