IFS
используется при расширении ${arr5[*]}
, а не при создании arr5
.
arr1=(1 2 3 4)
arr2=(1 2 3 4)
arr3=(1 2 3 4)
arr4=(1 2 3 4)
arr5=()
for i in ${!arr1[@]}; do
arr5+=("${arr1[i]}" "${arr2[i]}" "${arr3[i]}" "${arr4[i]}")
done
(IFS=";"; echo "${arr5[*]}")
Где возможно, проще просто изменить IFS
в подоболочке, чем пытаться сохранить и восстановить его значение вручную. (Ваша попытка не удалась в том редком, но возможном случае, когда IFS
был не задан с самого начала.)
Тем не менее, если вам нужна строка с ограничением ;
и arr5
- это способ добраться до нее, просто создайте строку напрямую:
for i in ${!arr1[@]}; do
s+="${arr1[i]} ${arr2[i]} ${arr3[i]} ${arr4[i]};"
done
s=${s%;} # Remove the last extraneous semicolon