Используйте read
, затем присвойте каждому массиву индивидуально.
for i in "${my_array[@]}"
do
IFS=: read -r username id name <<< "$i"
usernames+=("$username")
ids+=("$id")
names+=("$name")
done
Вы можете написать
i=0
for rec in "${my_array[@]}"
do
IFS=: read -r usernames[i] ids[i] names[i] <<< "$rec"
((i++))
done
, но я считаю первый цикл более читабельным, поскольку он не 'Не требуется явный индекс цикла для новых массивов.
Или, возможно, использование одной и той же индексной переменной (управляемой циклом for
) как для входного массива, так и для трех выходных массивов.
for ((i=0;i < ${#my_array[@]}; i++)); do
IFS=: read -r usernames[i] ids[i] names[i] <<< "${my_array[i]}"
done
И, наконец, если вы не хотите предполагать, что индексы массива являются непрерывной последовательностью, и вы хотите сохранить пробелы
# For example, my_array=([0]="..." [5]="..." [10]="...")
for i in "${!my_array[@]}"; do
IFS=: read -r usernames[i] ids[i] names[i] <<< "${my_array[i]}"
done