У меня есть небольшая проблема с переменной имя конкатенация или замена в BASH. Приведен:Имя переменной переменной массива BASH
#!/bin/bash
Audio1=(0:ita, 96k, AAC, 2.0, s16le, 48000) # audio stream definitions
Audio2=(1:rus, 128k, AAC, 2.0, s16le, 48000) # for use in ffmpeg or
Audio3=(2:klg, 96k, AAC, 1.0, s16le, 48000) # avconv
# and so on, now processing the audio streams
for ((i=1 ; i<=8 ; i++)) ; do
Audio="Audio$i"
Audio=${!Audio}
if [ ${#Audio[0]} -gt 0 ] ; then
# do the job with $Audio, here examplaryly:
echo ${Audio[@]}
fi
done
Ожидаемый как результат был:
0:ita, 96k, AAC, 2.0, s16le, 48000
1:rus, 128k, AAC, 2.0, s16le, 48000
2:klg, 96k, AAC, 1.0, s16le, 48000
я получил:
0:ita,
1:rus,
2:klg,
Это только половина решения, потому что это только первый элемент копируется из каждого исходного массива а не полностью скопирован в рабочий массив $ Audio. В PHP я бы написал замену имени переменной просто:
for ($i=1; $i<=8; $i++) {
$Audio = ${'Audio'.$i}; // ← that’s all the magic in PHP ;-)
if (isset($Audio[0])) {
// blabla
}
}
К сожалению, я не могу использовать PHP для этого приложения. Конечно, это один из моих первых сценариев в BASH. Переключение на любое другое кодирование (например, многие простые переменные вместо нескольких массивов) не является вариантом. Я должен использовать эти пресеты. Итак, где моя вина, что случилось?
Greetings - Bert
Элементы массива разделены пробелами, а не запятыми. – chepner
Спасибо. Я чувствую, что это будет не последняя ошибка. – Bert