Зачем вообще цикл?
arr=( $(echo $line) )
arr2=( $(echo $line2) )
Выполнено
Краткий пример:
#!/bin/bash
line="1 2 3 4"
line2="5 6 7 8"
arr=( $(echo $line) )
arr2=( $(echo $line2) )
declare -p arr
declare -p arr2
выход
$ bash line2arr.sh
declare -a arr='([0]="1" [1]="2" [2]="3" [3]="4")'
declare -a arr2='([0]="5" [1]="6" [2]="7" [3]="8")'
Если вход включает в себя буквальное {1,2,3,4}
Если ваша переменная содержит литерал {1,2,3,4}
, то вы можете просто включить '{},'
в IFS ( Внутренний разделитель полей - по умолчанию ' \t\n'
(пробел, табуляция, символ новой строки)), и затем преобразуйте строку в массив таким же образом, например,
#!/bin/bash
line="1 2 3 4"
line2="5 6 7 8"
line3={1,2,3,4}
arr=( $(echo $line) )
arr2=( $(echo $line2) )
oifs="$IFS" ## save old IFS
IFS=$'{}, \t\n' ## set IFS to include {},
arr3=( $(echo $line3) ) ## convert to array
IFS="$oifs" ## restore original IFS
declare -p arr
declare -p arr2
declare -p arr3
выход
$ bash line2arr.sh
declare -a arr='([0]="1" [1]="2" [2]="3" [3]="4")'
declare -a arr2='([0]="5" [1]="6" [2]="7" [3]="8")'
declare -a arr3='([0]="1" [1]="2" [2]="3" [3]="4")'