Le problème est que $1
dans
MYBASENAME="`basename $1`"
n'est pas cité. Utilisez ceci à la place :
MYBASENAME="$(basename "$1")"
Il vous manque une série de guillemets !
MYBASENAME="`basename \"$1\"`"
Cela résoudra votre problème.
Dans le cas où l'affectation est une substitution de commande unique, vous n'avez pas besoin de citer la substitution de commande. Le shell n'effectue pas de fractionnement de mots pour les affectations de variables.
MYBASENAME=$(basename "$1")
est tout ce qu'il faut. Vous devriez prendre l'habitude d'utiliser $()
au lieu de backticks car $()
s'emboîte plus facilement (c'est POSIX, d'ailleurs, et tous les shells modernes le supportent.)
PS :Vous devriez essayer de ne pas écrire bash scripts. Essayez d'écrire shell scripts. La différence étant l'absence de bashismes, zshismes, etc. Tout comme pour C, la portabilité est une caractéristique souhaitée des scripts, surtout si elle peut être atteinte facilement. Votre script n'utilise aucun bashisme, donc j'écrirais #!/bin/sh
Au lieu. Pour les tatillons :oui, je sais, les anciens SunOS et Solaris /bin/sh
ne comprends pas $()
mais le /usr/xpg4/bin/sh
est un shell POSIX.