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

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

Für diese Frage gibt es hier bereits Antworten :Warum verschluckt sich mein Shell-Skript an Leerzeichen oder anderen Sonderzeichen?

(6 Antworten)
Vor 6 Jahren geschlossen.

Ich versuche, dem Leerzeichen für einen Pfad in Bash zu entkommen, aber weder die Verwendung eines umgekehrten Schrägstrichs noch von Anführungszeichen funktioniert.

.sh-Skript:

ROOT="/home/hogar/Documents/files/"
FILE=${ROOT}"bdd.encrypted"
DESTINATION="/home/hogar/Ubuntu\ One/folder"

mv ${FILE} ${DESTINATION}

Nach dem Ausführen des Skripts (./file ) das ist das Ergebnis:

mv: target 'One/folder' is not a directory

Warum funktioniert die mv Befehl teilt die Zeichenfolge auf, und wie kann ich das verhindern?

Akzeptierte Antwort:

Sie erweitern die DESTINATION-Variable, wenn Sie echo ausgeführt haben Folgendes würden Sie erhalten:

echo ${DESTINATION}
/home/hogar/Ubuntu\ One/folder

Aber mv versteht das nicht:

mv ${FILE} ${DESTINATION}                                                
mv: cannot move '/home/hogar/Documents/files/bdd.encrypted' to '/home/hogar/Ubuntu\\ One/folder': No such file or directory

(aus irgendeinem Grund ist mein MV ausführlicher)

Um dies zu verhindern, sollten Sie stattdessen Anführungszeichen verwenden:

mv "${FILE}" "${DESTINATION}"

Wenn Sie keine Erweiterung benötigen (da Sie bereits zuvor erweitert haben), verwenden Sie einfach "$..." sollte genügen:

mv "$FILE" "$DESTINATION"

Linux
  1. Kann ein Bash-Skript mit einer Datei verknüpft werden?

  2. Typeset -a Gibt Fehler im Skript an?

  3. Bash-Skript zum Ausfüllen einer Vorlage?

  4. Kann dieses Skript nicht verstehen. Basch ?

  5. Warum kann ich die Pgrep-Ausgabe nicht direkt auf eine Variable im Bash-Skript bringen?

35 Bash-Skriptbeispiele

So führen Sie ein Bash-Skript aus

Leerzeichen für Variablen in Bash-Skript?

So ersetzen Sie Leerzeichen in Dateinamen mit einem Bash-Skript

Führen Sie den Bash-Befehl auf der Jenkins-Pipeline aus

Escape einem Sternzeichen (*) in der Bash