4

В моем 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`

К сожалению, команда не работает, потому что имя файла разделено:

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

Я также попытался добавить пользовательский IFS, как я читал на некоторых форумах:

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

Но, таким образом, я получаю ошибку

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

Я пытался довольно долго, но я не могу заставить свой сценарий работать. Странно то, что если я запускаю ту же команду, которую мой сценарий должен создать вручную (повторяя ее внутри моего сценария) в командной консоли, это на самом деле работает. Но не внутри моего сценария. Есть намеки?

1 ответ1

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"

Я также удалил лишние команды echo и экранирование, в котором нет необходимости.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .