【问题标题】:How do format and traverse an array that contains arrays ,and each array contains an array?如何格式化和遍历包含数组的数组,并且每个数组都包含一个数组?
【发布时间】:2017-06-29 15:11:36
【问题描述】:

我正在尝试在数组中创建多维数组。

tests=("'0' '1 2'" "'4' '5 6'")

在测试中的每个数组中,我想要有子数组。用第一个数组“'0''1,2'”,再做一个for循环遍历子数组的内容。

【问题讨论】:

  • 你为什么要强制 bash 这样做? bash 只有一维数组。为工作选择合适的工具。

标签: bash shell


【解决方案1】:

从 bash 4.3 开始。 (3个级别,第一个仅包含一个演示元素):

arr01=(0 '1 2')
arr02=(4 '5 6')
arr1=(arr01 arr02)
arr=(arr1)

declare -n elmv1 elmv2

for elmv1 in "${arr[@]}"; do
    for elmv2 in "${elmv1[@]}"; do
        for elm in "${elmv2[@]}"; do
            echo "<$elm>"
        done
    done
done

4.3 之前

arr01=(0 '1 2')
arr02=(4 '5 6')
arr1=('arr01[@]' 'arr02[@]')
arr=('arr1[@]')

for elmv1 in "${arr[@]}"; do
    for elmv2 in "${!elmv1}"; do
        for elm in "${!elmv2}"; do
            echo "<$elm>"
        done
    done
done

【讨论】:

  • declare -n elmv1 elmv2 这一行的意义何在?
  • @clime,如果您有 bash 4.3 或更高版本,请输入 man bash 并搜索 declare -n
  • @linux_sa 抱歉,还不清楚。我的 bash 4.3.48 人说:...running declare -n ref=$1 inside the function creates ...,但这里的答案是declare -n elmv1 elmv2,没有=。那是一样的吗?我很不清楚。 help declare 也没有多大帮助:-n make NAME a reference to the variable named by its value。这对我来说几乎毫无意义。
  • @Timo, This answer 似乎解释了最后一句话。
  • a=( 1 2 ); declare -n a=b; --> bash: declare: a: reference variable cannot be an array 否则declare -n b=a; b=(3 4); declare -p a b
猜你喜欢
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 2021-08-03
  • 2016-08-19
  • 2018-07-16
  • 2014-06-30
相关资源
最近更新 更多