Ответ 1
Значение #!/bin/sh
Это потому, что вы используете #!/bin/sh
в своем script, в качестве исправления вы должны изменить его на #!/bin/bash
.
#!/bin/bash
for i in *.mp4
do
ffmpeg -i "$i" "${i/.mp4/.mp3}"
done
Люди используют #!/bin/sh
, когда используют только ограниченный набор функций (определенный стандартом POSIX) для максимальной переносимости. #!/bin/bash
отлично подходит для пользовательских скриптов. /bin/sh
обычно символически связывается с минимальной оболочкой, совместимой с POSIX, или с стандартной оболочкой (например, bash). В более позднем случае bash запускается в режиме совместимости, что объясняется в manpage:
Если bash вызывается с именем sh, он пытается как можно ближе имитировать поведение при запуске исторических версий sh, в то же время соответствующее стандарту POSIX.
Предлагаемые изменения в script:
- Считается хорошей практикой использовать кавычки вокруг переменных (
"$i"
вместо$i
). Котируемые переменные будут предотвращать проблемы, если сохраненное имя файла содержит пробелы. - Мне нравится, что вы используете расширенное расширение . Я предлагаю использовать
"${i%.mp4}.mp3"
(вместо"${i/.mp4/.mp3}"
), так как${parameter%word}
заменяет только в конце (например, файл с именемfoo.mp4.backup
).