Merging two arrays in Bash Merging two arrays in Bash bash bash

Merging two arrays in Bash


If you don't care about having duplicates, or maintaining indexes, then you can concatenate the two arrays in one line with:

NEW=("${OLD1[@]}" "${OLD2[@]}")

Full example:

Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');UnixShell=("${Unix[@]}" "${Shell[@]}")echo ${UnixShell[@]}echo ${#UnixShell[@]}

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


Since Bash supports sparse arrays, it's better to iterate over the array than to use an index based on the size.

a=(0 1); b=(2 3)i=0for z in ${a[@]}do    for y in ${b[@]}    do        c[i++]="$z:$y"    donedonedeclare -p c   # dump the array

Outputs:

declare -a c='([0]="0:2" [1]="0:3" [2]="1:2" [3]="1:3")'


here's one way

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]});    donedonefor i in ${c[@]}do    echo $idone