我有以下情况,两个数组,让我们称它们为A(0 1)和B(1 2),我需要将它们组合成一个新的数组C(0:1 0:2 1:1 1:2 ),我想出的最新一点就是这个循环:
for ((z = 0; z <= ${#A[@]}; z++)); do
for ((y = 0; y <= ${#B[@]}; y++)); do
C[$y + $z]="${A[$z]}:"
C[$y + $z + 1]="${B[$y]}"
done
done
但它不能很好地工作,因为输出我得到了这个:
0: : : :
在这种情况下,输出应为0:1 0:2,因为A =(0)且B =(1 2)
答案 0 :(得分:62)
如果您不关心重复项,可以在一行中将两个数组连接起来:
NEW=("${OLD1[@]}" "${OLD2[@]}")
完整示例:
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');
UnixShell=("${Unix[@]}" "${Shell[@]}")
echo ${UnixShell[@]}
echo ${#UnixShell[@]}
答案 1 :(得分:12)
由于Bash支持稀疏数组,因此迭代数组比使用基于大小的索引更好。
a=(0 1); b=(2 3)
i=0
for z in ${a[@]}
do
for y in ${b[@]}
do
c[i++]="$z:$y"
done
done
declare -p c # dump the array
输出:
declare -a c='([0]="0:2" [1]="0:3" [2]="1:2" [3]="1:3")'
答案 2 :(得分:4)
这是一种方式
a=(0 1)
b=(1 2)
for((i=0;i<${#a[@]};i++));
do
for ((j=0;j<${#b[@]};j++))
do
c+=(${a[i]}:${b[j]});
done
done
for i in ${c[@]}
do
echo $i
done
答案 3 :(得分:1)
这是我在Bash中合并两个数组的方式:
示例数组:
AR=(1 2 3)
BR=(4 5 6)
一线:
CR=($(echo ${AR[*]}) $(echo ${BR[*]}))
答案 4 :(得分:-1)
在bash中合并两个数组的一行语句:
combine=( `echo ${array1[@]}` `echo ${array2[@]}` )