Pertanyaan Tangani nama file dengan spasi di dalam Bash-skrip


Dalam Bash-script saya, saya harus menangani nama file dengan spasi. Ini adalah garis-garis penting di dalam naskah saya:

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`

Sayangnya, perintah tidak berfungsi, karena nama file terpecah:

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

Saya juga mencoba menambahkan IFS kustom ketika saya membaca di beberapa forum:

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

Tapi dengan cara ini, saya mendapatkan kesalahan

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

Saya mencoba cukup lama sekarang tetapi saya tidak dapat menjalankan skrip saya. Yang aneh adalah jika saya menjalankan perintah yang sama yang harus dibuat oleh skrip saya secara manual (menggemakannya di dalam skrip saya) pada Shell, ia benar-benar berfungsi. Tapi tidak di dalam naskah saya. Ada petunjuk?


4
2018-01-09 13:08


asal


Aku tidak tahu apa itu backspace IFS seharusnya dilakukan (tidak apa-apa tentang backspace, saya baru menyadari itu bisa menjadi karakter apa saja dan itu ada untuk mempertahankan garis baru yang jika tidak akan turun), tetapi Anda dapat mengatur IFS tanpa menggunakan echo: IFS=$'\n'. Juga, di satu tempat Anda menggunakan backticks dan yang lain yang Anda gunakan $(). Itu $() bentuk lebih disukai karena lebih mudah dibaca, dapat dengan mudah bersarang, dll. - Dennis Williamson


Jawaban:


Bungkus nama variabel dalam tanda kutip:

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

Saya juga menyingkirkan yang berlebihan echo perintah dan melarikan diri yang tidak perlu.


9
2018-01-09 13:11



Terima kasih, ini berhasil! Tidak tahu mengapa bersikeras melestarikan melarikan diri sebanyak itu;) - ifischer