Dateiname mit Leerzeichen in Bash-Skript behandeln

7646
ifischer

In meinem Bash-Skript muss ich Dateinamen mit Leerzeichen behandeln. Dies sind die wichtigen Zeilen in meinem Skript:

mp3file="/media/d/Music/zz_Hardcore/Sampler/Punk-O-Rama\ Vol.5\ \[MP3PRO\]/01\ -\ Nofx\ -\ Pump\ up\ the\ Valium.mp3" echo "Command: mp3info -x `echo $mp3file`" mp3info -x `echo $mp3file` 

Leider funktioniert der Befehl nicht, da der Dateiname aufgeteilt ist:

mp3info: invalid option -- '\' mp3info: invalid option -- '\' Error opening MP3: /media/d/Music/zz_Hardcore/Sampler/Punk-O-Rama\: No such file or directory Error opening MP3: Vol.5\: No such file or directory Error opening MP3: \[MP3PRO\]/01\: No such file or directory Error opening MP3: Nofx\: No such file or directory Error opening MP3: Pump\: No such file or directory Error opening MP3: up\: No such file or directory Error opening MP3: the\: No such file or directory Error opening MP3: Valium.mp3: No such file or directory 

Ich habe auch versucht, ein benutzerdefiniertes IFS hinzuzufügen, wie ich in einigen Foren gelesen habe:

SAVEIFS=$IFS IFS=$(echo -en "\n\b") # Script like above IFS=$SAVEIFS 

Aber so bekomme ich den Fehler

Error opening MP3: /media/d/Music/zz_Hardcore/Sampler/Punk-O-Rama\ Vol.5\ \[MP3PRO\]/01\ -\ Nofx\ -\ Pump\ up\ the\ Valium.mp3: No such file or directory 

Ich habe es schon eine Weile versucht, aber ich kann mein Skript nicht zum Laufen bringen. Merkwürdig ist, dass, wenn ich den gleichen Befehl ausführt, den mein Skript manuell erstellen soll (dh es in meinem Skript wiederholt wird) auf der Shell, es tatsächlich funktioniert. Aber nicht in meinem Skript. Irgendwelche Hinweise?

4
Ich weiß nicht, was eine Rücktaste in `IFS` tun soll (egal die Rücktaste, ich habe gerade erkannt, dass es sich um einen beliebigen Charakter handeln könnte und der Newline dabei erhalten bleibt, der sonst fallen gelassen würde), aber Sie können` setzen IFS` ohne `echo`:` IFS = $ '\ n'`. An einem Ort verwenden Sie Backticks und an einem anderen verwenden Sie $ (). Das `$ ()` - Formular wird bevorzugt, da es lesbarer ist und leicht verschachtelt werden kann usw. Dennis Williamson vor 13 Jahren 1

1 Antwort auf die Frage

9
Cry Havok

Wickeln Sie die Variablennamen in Anführungszeichen ein:

mp3file="/media/music/Punk-O-Rama Vol.5 \[MP3PRO\]/01 - Nofx - Pump up the Valium.mp3" echo "Command: mp3info -x \"$mp3file\"" mp3info -x "$mp3file" 

Ich habe auch die überflüssigen echoBefehle und Fluchtungen entfernt, die nicht notwendig sind.

Danke, es geht! Ich weiß nicht, warum man darauf bestand, so viel Flucht zu bewahren;) ifischer vor 13 Jahren 0