shell 通过笛卡尔积将两个Bash数组合并为键:值对

20jt8wwn  于 2023-03-09  发布在  Shell
关注(0)|答案(5)|浏览(248)

我有两个数组AB,如何将它们组合成一个新的数组C,即它们的笛卡尔积?例如:

A=( 0 1 )
B=( 1 2 )

预期输出:

C=( 0:1 0:2 1:1 1:2 )
pb3s4cty

pb3s4cty1#

如果你不关心是否有重复项,也不关心是否维护索引,那么你可以使用以下语句将两个数组连接在一行中:

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[@]}

贷方:http://www.thegeekstuff.com/2010/06/bash-array-tutorial/

unftdfkk

unftdfkk2#

由于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")'
bvuwiixz

bvuwiixz3#

这里有一个办法

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
o2gm4chl

o2gm4chl4#

下面是我在Bash中合并两个数组的过程:
阵列示例:
AR=(1 2 3) BR=(4 5 6)
一个内衬:
CR=($(echo ${AR[*]}) $(echo ${BR[*]}))

wvt8vs2t

wvt8vs2t5#

在bash中合并两个数组的一行语句:

combine=( `echo ${array1[@]}` `echo ${array2[@]}` )

相关问题