3 回答
TA贡献1877条经验 获得超1个赞
Bash不支持多维数组,也不支持哈希,并且似乎您想要一个哈希值即数组。这个解决方案不是很漂亮,带有xml文件的解决方案应该更好:
array=('d1=(v1 v2 v3)' 'd2=(v1 v2 v3)')
for elt in "${array[@]}";do eval $elt;done
echo "d1 ${#d1[@]} ${d1[@]}"
echo "d2 ${#d2[@]} ${d2[@]}"
TA贡献1869条经验 获得超4个赞
Bash没有多维数组。但是您可以使用关联数组模拟某种类似的效果。下面是一个伪装为多维数组的关联数组的示例:
declare -A arr
arr[0,0]=0
arr[0,1]=1
arr[1,0]=2
arr[1,1]=3
echo "${arr[0,0]} ${arr[0,1]}" # will print 0 1
如果您未将数组声明为关联的(带有-A),则上述方法将无效。例如,如果省略declare -A arr路线,echo将打印2 3的代替0 1,因为0,0,1,0并且这样将作为算术表达式和评价0(数值以逗号运算符的右侧)。
TA贡献1936条经验 获得超6个赞
这对我有用。
# Define each array and then add it to the main one
SUB_0=("name0" "value0")
SUB_1=("name1" "value1")
MAIN_ARRAY=(
SUB_0[@]
SUB_1[@]
)
# Loop and print it. Using offset and length to extract values
COUNT=${#MAIN_ARRAY[@]}
for ((i=0; i<$COUNT; i++))
do
NAME=${!MAIN_ARRAY[i]:0:1}
VALUE=${!MAIN_ARRAY[i]:1:1}
echo "NAME ${NAME}"
echo "VALUE ${VALUE}"
done
- 3 回答
- 0 关注
- 1083 浏览
添加回答
举报