【发布时间】:2017-06-29 15:11:36
【问题描述】:
我正在尝试在数组中创建多维数组。
tests=("'0' '1 2'" "'4' '5 6'")
在测试中的每个数组中,我想要有子数组。用第一个数组“'0''1,2'”,再做一个for循环遍历子数组的内容。
【问题讨论】:
-
你为什么要强制 bash 这样做? bash 只有一维数组。为工作选择合适的工具。
我正在尝试在数组中创建多维数组。
tests=("'0' '1 2'" "'4' '5 6'")
在测试中的每个数组中,我想要有子数组。用第一个数组“'0''1,2'”,再做一个for循环遍历子数组的内容。
【问题讨论】:
从 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 这一行的意义何在?
man bash 并搜索 declare -n。
...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。这对我来说几乎毫无意义。
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