在BASH中,有没有一种方法可以使用for循环遍历多个数组?

3

我有4个数组:

ARRAY1=( A B C D )
ARRAY2=( E F G )
ARRAY3=( H I J K L M )
ARRAY4=( N )

我想要一个包含这些元素的新数组:

FINAL_ARRAY=( ARRAY1 A ARRAY1 B ARRAY1 C ARRAY1 D ARRAY2 E ARRAY2 F ARRAY2 G ARRAY3 H ARRAY3 I ARRAY3 J ARRAY3 K ARRAY3 L ARRAY3 M ARRAY4 N )

这可以通过使用for循环或其他方式在BASH中完成吗?
谢谢。

2
你真的不应该将变量名(代码)转换为数据。你有把C变量名放在C字符串值中的习惯吗? - lhunath
1个回答

8
#!/bin/bash
ARRAY1=( A B C D )
ARRAY2=( E F G )
ARRAY3=( H I J K L M )
ARRAY4=( N )
ARRAYNAMES=(ARRAY1 ARRAY2 ARRAY3 ARRAY4)
for an in "${ARRAYNAMES[@]}"; do
    aref="$an[@]"
    for item in "${!aref}"; do
        NEWARRAY=("${NEWARRAY[@]}" "$an" "$item")
    done
done
echo "${NEWARRAY[@]}"

输出:

ARRAY1 A ARRAY1 B ARRAY1 C ARRAY1 D ...

2
太准确了,就是这样。非常感谢你,Perreal。我为此浪费了整整一天的时间。最后,原来如此简单。 - AbhinavK
你至少需要更好地引用你的扩展:"${NEWARRAY[@]}"。 - lhunath
@perreal:还有 $an,$item。 - lhunath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接