Arrays 在构建和阵列时修改bash中的IFS

Arrays 在构建和阵列时修改bash中的IFS,arrays,bash,ifs,Arrays,Bash,Ifs,我正在尝试用4个不同的数组在bash中构建一个带有自定义IFS的数组,你能帮我一下吗 #!/bin/bash arr1=(1 2 3 4) arr2=(1 2 3 4) arr3=(1 2 3 4) arr4=(1 2 3 4) arr5=() oldIFS=$IFS IFS=\; for i in ${!arr1[@]}; do arr5+=($(echo ${arr1[i]} ${arr2[i]} ${arr3[i]} ${arr4[i]})) done IFS=$

我正在尝试用4个不同的数组在bash中构建一个带有自定义IFS的数组,你能帮我一下吗

#!/bin/bash   
arr1=(1 2 3 4)
arr2=(1 2 3 4)  
arr3=(1 2 3 4)  
arr4=(1 2 3 4)
arr5=()
oldIFS=$IFS
IFS=\;
for i in ${!arr1[@]}; do  
    arr5+=($(echo ${arr1[i]} ${arr2[i]} ${arr3[i]} ${arr4[i]}))
done
IFS=$oldIFS
echo ${arr5[@]}
i输出是什么:

1 1 1 1;2 2 2 2;3 3 3 3;4 4 4 4 4 4
但它不起作用。输出是正常的“”

1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 4 4
有什么想法吗

我在不同的地方尝试了IFS: 1) 在for循环中 2) 在arr5()之前


我在for循环和IFS改为“;”后测试了它,但它在数组创建中不起作用。

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[*]}")
在可能的情况下,只需在子shell中更改
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

你在这里的最终目标是什么?不需要触摸
IFS
就可以轻松构建该字符串。是的,我知道在${arr4[i]}之后添加“;”很简单。但是这里有很多空格,我必须在字符串上做多次运算,然后将它拆分成我需要的部分,因为4个数组都是可变的,所以如果我在其中得到额外的空格或其他字符,之后的所有运算都需要修改。。基本上我需要相信数组分隔符不会改变。是的,我使用了${arr5[@]}而不是${arr5[*]}。现在就像一个符咒。第二条路在“”之后有一个额外的空格;“我必须改变”;“至”;“好吧,现在我更明白如果了。谢谢你!