GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Basisname mit Leerzeichen in einem Bash-Skript?

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.


Linux
  1. Welcher Shell-Interpreter führt ein Skript ohne Shebang aus?

  2. Bash-Skript mit `set -e` stoppt nicht beim Befehl `… &&…`?

  3. Rm-Befehl im Bash-Skript funktioniert nicht mit Variablen?

  4. Warum kann ich Leerzeichen in einem Bash-Skript nicht maskieren?

  5. Ersetzen Sie Leerzeichen mit Unterstrichen über BASH

Automatisieren Sie die Bildverarbeitung mit diesem Bash-Skript

So schreiben Sie ein Bash-Skript mit Beispielen

35 Bash-Skriptbeispiele

So führen Sie ein Bash-Skript aus

Bash-Anfängerserie Nr. 10:Automatisierung mit Bash

Bash-Skript für Schleife mit Beispielen erklärt