在构建和阵列时修改 bash 中的 IFS
Modify IFS in bash while building and array
我正在尝试使用自定义 IFS 从 bash 中的 4 个不同数组构建一个数组,你能帮帮我吗?
#!/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[@]}
我的输出是什么:
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 从 bash 中的 4 个不同数组构建一个数组,你能帮帮我吗?
#!/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[@]}
我的输出是什么:
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