Причина, по которой ваш подход не работает, заключается в том, что оболочка применяет разделение слов к выводу команды внутри $(...)
, и нет способа трактовать переводы строк как разделитель.Вы можете использовать mapfile
для чтения строк в массив (в Bash 4 +):
mapfile -t vids < <(shuf -e "${vids[@]}")
или в старых версиях Bash вы можете использовать старый старомодный цикл while
:
vids2=()
while read -r item; do
vids2+=("$item")
done < <(shuf -e "${vids[@]}")