El problema es que $1
en
MYBASENAME="`basename $1`"
no se cita. Use esto en su lugar:
MYBASENAME="$(basename "$1")"
¡Te falta un conjunto de comillas!
MYBASENAME="`basename \"$1\"`"
Eso solucionará tu problema.
En el caso de que la asignación sea una sustitución de un solo comando, no necesita citar la sustitución del comando. El shell no realiza división de palabras para asignaciones de variables.
MYBASENAME=$(basename "$1")
es todo lo que se necesita. Deberías acostumbrarte a usar $()
en lugar de acentos graves porque $()
se anida más fácilmente (es POSIX, por cierto, y todos los shells modernos lo admiten).
PD:Deberías intentar no escribe bash guiones. Intenta escribir shell guiones. La diferencia es la ausencia de bashisms, zshisms, etc. Al igual que para C, la portabilidad es una característica deseada de los scripts, especialmente si se puede lograr fácilmente. Su secuencia de comandos no usa ningún bashism, así que escribiría #!/bin/sh
en cambio. Para los quisquillosos:sí, lo sé, SunOS y Solaris antiguos /bin/sh
no entiendo $()
pero el /usr/xpg4/bin/sh
es un shell POSIX.