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

Leerzeichen für Variablen in Bash-Skript?

Ich habe ein Leerzeichen in einem der Verzeichnisnamen. Ich möchte eine Datei darunter aus einem Bash-Skript auflisten. Hier ist mein Skript:

fpath="${HOME}/"New Folder"/foobar.txt"

echo "fpath=(${fpath})"
#fpath="${HOME}/${fname}"

ls "${fpath}"

Die Ausgabe für dieses Skript ist:

fpath=(/Users/<username>/"New Folder"/foobar.txt)
ls: /Users/<username>/"New Folder"/foobar.txt: No such file or directory

Aber wenn die Datei auf meiner Shell aufgelistet wird, existiert sie:

$ ls /Users/<username>/"New Folder"/foobar.txt
/Users/<username>/New Folder/foobar.txt

Gibt es eine Möglichkeit, ls zu bekommen den Pfad aus meinem Skript anzeigen?

Akzeptierte Antwort:

Entfernen Sie einfach die inneren Anführungszeichen:

fpath="${HOME}/New Folder/foobar.txt"

Da der komplette Variableninhalt in doppelten Anführungszeichen steht, müssen Sie dies kein zweites Mal tun. Der Grund, warum es von der CLI aus funktioniert, ist, dass Bash zuerst die Anführungszeichen auswertet. Es schlägt in der Variablen fehl, weil die durch den Backslash maskierten Anführungszeichen als wörtlicher Teil des Verzeichnispfads behandelt werden.


Linux
  1. Auf Umgebungsvariablen prüfen

  2. Bash-Skript:Verwendung eines Skriptbefehls aus einem Bash-Skript zum Protokollieren einer Sitzung

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

  4. bash + liest Variablen und Werte aus der Datei per Bash-Skript

  5. Wie man in einem Bash-Skript nach Unicode sucht

Bash für Schleife

35 Bash-Skriptbeispiele

So führen Sie ein Bash-Skript aus

Wie fügt man Zeilenumbrüche in Variablen im Bash-Skript ein?

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

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