Arrays 在构建和阵列时修改bash中的IFS
我正在尝试用4个不同的数组在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=$
#!/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[*]}。现在就像一个符咒。第二条路在“”之后有一个额外的空格;“我必须改变”;“至”;“好吧,现在我更明白如果了。谢谢你!