Пишу скрипт для работы с коллекцией файлов, который бы фиксил idv3 тэги (проставлял там, где нет и удалял лишние). Столкнулся с такой проблемой - хотел сделать работу более универсальной и нужные теги собирать в массив и потом выводить. Примерно выглядит так:
...
tags=()
artist="Michael Jackson"
has_artist=`ffprobe -loglevel error -show_entries format_tags=artist -of default=noprint_wrappers=1:nokey=1 $track | wc -l`
if [ $has_artist = 0 ]; then
tags+=("-metadata artist=\"$artist\"")
fi
if [ ${#tags[@]} != 0 ]; then
ffmpeg -i $track -c copy ${metadata[@]} $track
fi
...
Проблема в том, что он каким то странным образом не различает $artist как строку и разбивает ее на слова из за чего получаю ошибку
unable to find a suitable output format for 'Jackson'
Если исполнитель состоит из одного слова, то все нормально. Также с многословными именами работает конструкция с кавычками:
ffmpeg -i $track -c copy -metadata artist="$artist" $track
Т.е проблема где то с массивом как я понял