簡體   English   中英

在 Bash 中合並兩個數組

[英]Merging two arrays in Bash

我有以下情況,兩個數組,我們稱它們為 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 )

如果您不關心重復或維護索引,那么您可以將兩個數組連接在一行中:

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/

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

這是一種方法

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

這是我在 Bash 中合並兩個數組的方法:

示例數組:

AR=(1 2 3) BR=(4 5 6)

一個班輪:

CR=($(echo ${AR[*]}) $(echo ${BR[*]}))

在 bash 中合並兩個數組的一行語句:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM