Ответ Игнасио укажет вам правильное направление, но я хотел прокомментировать некоторые вещи в вашем сценарии.
Эта строка имеет много бессмысленных вращений:
A=$(mkvmerge -i input.mkv | grep -i attachment | awk '{printf $3 "\n"}' | sed 's;\:;;' | awk 'END { print NR }')
Здесьэто упрощено:
A=$(mkvmerge -i input.mkv | grep -i attachment | wc -l)
Нет необходимости использовать знак доллара и фигурные скобки для индексов массива:
attachment[i]="--attach-file ${font1[i]}"
Кроме того, $""
используется для создания строк для перевода (i18nи l10n).Вам, вероятно, там не нужно.Тем не менее, это одна из строк, которую вы должны изменить, потому что это часть вашей проблемы.Вы обнаружите, что строка, предшествующая этой с командой sed
, не понадобится.
Редактировать:
Если вам действительно нужно использовать массив:
for (( i=1; i<=A; i++ ))
do
#make option for add attachment
attachment+=("--attach-file" "${font1[i]}")
done
mkvmerge -o output.mkv -d 1 -S test.mp4 sub.ass "${attachment[@]}"
Полученный массив attachment
будет иметь в два раза больше элементов, чем массив font1
.
$ declare -p font1 attachment # show the contents
declare -a font1='([0]="Beach.ttf" [1]="Candara.ttf" [2]="CASUCM.TTF" [3]="Complete" [4]="in" [5]="Him.ttf" [6]="CURLZ_.TTF" [7]="Frostys" [8]="Winterland.TTF" [9]="stilltim.ttf")'
declare -a attachment='([0]="--attach-file" [1]="Beach.ttf" [2]="--attach-file" [3]="Candara.ttf" [4]="--attach-file" [5]="CASUCM.TTF" [6]="--attach-file" [7]="Complete in Him.ttf" [8]="--attach-file" [9]="CURLZ_.TTF" [10]="--attach-file" [11]="Frostys Winterland.TTF" [12]="--attach-file" [13]="stilltim.ttf")'