我有两个数组 A
和 B
,如何将它们合并成一个新的数组C
,该数组是它们的笛卡尔积?例如,给定:
A=( 0 1 )
B=( 1 2 )
期望的输出:
C=( 0:1 0:2 1:1 1:2 )
我有两个数组 A
和 B
,如何将它们合并成一个新的数组C
,该数组是它们的笛卡尔积?例如,给定:
A=( 0 1 )
B=( 1 2 )
期望的输出:
C=( 0:1 0:2 1:1 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
for
循环应该在数组引用周围使用双引号。这将保留数组值中的空格。尝试使用 a=("foo bar" "baz quux")
进行测试。同样,c+=
赋值需要引用新值。 - tripleee以下是我在Bash中合并两个数组的方法:
示例数组:
AR=(1 2 3)
BR=(4 5 6)
一行代码实现:
CR=($(echo ${AR[*]}) $(echo ${BR[*]}))
在Bash中合并两个数组的一行语句:
combine=( `echo ${array1[@]}` `echo ${array2[@]}` )
combine=("${array1[@]}" "${array2[@]}")
。这也是 Ian Dunn 所说的。 - Toby Speight