Problém je v tom, že $1
v
MYBASENAME="`basename $1`"
není citován. Místo toho použijte toto:
MYBASENAME="$(basename "$1")"
Chybí vám jedna sada uvozovek!
MYBASENAME="`basename \"$1\"`"
To váš problém vyřeší.
V případě, kdy je přiřazení nahrazení jedním příkazem, nemusíte uvádět substituci příkazu. Shell neprovádí dělení slov pro přiřazení proměnných.
MYBASENAME=$(basename "$1")
je vše, co je potřeba. Měli byste si zvyknout používat $()
místo zpětných zaškrtnutí, protože $()
vnořuje se snadněji (je to mimo jiné POSIX a všechny moderní shelly to podporují.)
PS:Měli byste to zkusit ne napište bash skripty. Zkuste napsat shell skripty. Rozdíl je v nepřítomnosti bashismů, zshismů atd. Stejně jako pro C je přenositelnost žádanou vlastností skriptů, zvláště pokud ji lze snadno dosáhnout. Váš skript nepoužívá žádné bashismy, takže bych napsal #!/bin/sh
namísto. Pro hnidopichy:Ano, já vím, starý SunOS a Solaris /bin/sh
nerozumím $()
ale /usr/xpg4/bin/sh
je POSIX shell.