Il problema è che $1
dentro
MYBASENAME="`basename $1`"
non è citato. Usa invece questo:
MYBASENAME="$(basename "$1")"
Ti manca una serie di virgolette!
MYBASENAME="`basename \"$1\"`"
Questo risolverà il tuo problema.
Nel caso in cui l'assegnazione sia una singola sostituzione di comando non è necessario citare la sostituzione di comando. La shell non esegue la suddivisione delle parole per le assegnazioni di variabili.
MYBASENAME=$(basename "$1")
è tutto ciò che serve. Dovresti prendere l'abitudine di usare $()
invece di apici inversi perché $()
nidifica più facilmente (è POSIX, btw., e tutte le shell moderne lo supportano.)
PS:dovresti provare a non scrivi bash script. Prova a scrivere shell script. La differenza è l'assenza di bashisms, zshisms, ecc. Proprio come per C, la portabilità è una caratteristica desiderata degli script, specialmente se può essere raggiunta facilmente. Il tuo script non usa alcun bashismo, quindi scriverei #!/bin/sh
invece. Per i pignoli:Sì, lo so, vecchio SunOS e Solaris /bin/sh
non capisco $()
ma il /usr/xpg4/bin/sh
è una shell POSIX.