在 Bash 脚本中处理带有空格的文件名

Wol*_*ekt 4 bash filenames bash-scripting

在我的 Bash 脚本中,我必须处理带有空格的文件名。这些是我的脚本中的重要行:

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`
Run Code Online (Sandbox Code Playgroud)

不幸的是,该命令不起作用,因为文件名被拆分:

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
Run Code Online (Sandbox Code Playgroud)

当我在一些论坛上阅读时,我还尝试添加自定义 IFS:

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
# Script like above
IFS=$SAVEIFS
Run Code Online (Sandbox Code Playgroud)

但是这样,我得到了错误

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
Run Code Online (Sandbox Code Playgroud)

我现在尝试了很长时间,但我无法让我的脚本工作。奇怪的是,如果我在 Shell 上运行我的脚本应该手动创建的相同命令(在我的脚本中回显它),它实际上可以工作。但不在我的脚本中。任何提示?

Cry*_*vok 9

将变量名用引号括起来:

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

我还删除了多余的echo命令并进行了不必要的转义。