Das Problem ist, dass $1
in
MYBASENAME="`basename $1`"
wird nicht zitiert. Verwenden Sie stattdessen Folgendes:
MYBASENAME="$(basename "$1")"
Ihnen fehlt ein Satz Anführungszeichen!
MYBASENAME="`basename \"$1\"`"
Das wird Ihr Problem beheben.
Wenn es sich bei der Zuweisung um eine einzelne Befehlsersetzung handelt, müssen Sie die Befehlsersetzung nicht in Anführungszeichen setzen. Die Shell führt keine Worttrennung für Variablenzuweisungen durch.
MYBASENAME=$(basename "$1")
ist alles was es braucht. Sie sollten sich angewöhnen, $()
zu verwenden statt Backticks, weil $()
verschachtelt sich leichter (es ist übrigens POSIX, und alle modernen Shells unterstützen es.)
PS:Sie sollten es nicht versuchen schreiben Sie bash Skripte. Versuchen Sie, shell zu schreiben Skripte. Der Unterschied ist das Fehlen von Bashismen, Zshisms usw. Genau wie bei C ist Portabilität ein erwünschtes Merkmal von Skripten, insbesondere wenn es leicht zu erreichen ist. Ihr Skript verwendet keine Bashismen, also würde ich #!/bin/sh
schreiben stattdessen. Für die Nitpicker:Ja, ich weiß, altes SunOS und Solaris /bin/sh
verstehe $()
nicht aber die /usr/xpg4/bin/sh
ist eine POSIX-Shell.