Bash中的多维数组

我正在计划一个脚本来管理我的Linux系统的某些部分,并决定要使用bash还是python。


我宁愿将其作为Bash脚本来执行,仅仅是因为命令更简单,但真正的决定因素是配置。我需要能够在配置文件中存储多维数组,以告诉脚本如何处理自身。使用bash将简单的key = value对存储在配置文件中非常容易,但是我能想到的做多维数组的唯一方法是两层解析引擎,例如


array=&d1|v1;v2;v3&d2|v1;v2;v3

但是marshall / unmarshall代码可能会变得很笨拙,并且对于下一个必须执行此操作的较差的树液而言,它与用户友好相去甚远。如果我不能在bash中轻松做到这一点,我将简单地将配置写入xml文件,然后用python编写脚本。


有什么简单的方法可以做到这一点吗?


感谢大家。


缥缈止盈
浏览 1014回答 3
3回答

冉冉说

Bash不支持多维数组,也不支持哈希,并且似乎您想要一个哈希值即数组。这个解决方案不是很漂亮,带有xml文件的解决方案应该更好:array=('d1=(v1 v2 v3)' 'd2=(v1 v2 v3)')for elt in "${array[@]}";do eval $elt;doneecho "d1 ${#d1[@]} ${d1[@]}"echo "d2 ${#d2[@]} ${d2[@]}"

MMTTMM

Bash没有多维数组。但是您可以使用关联数组模拟某种类似的效果。下面是一个伪装为多维数组的关联数组的示例:declare -A arrarr[0,0]=0arr[0,1]=1arr[1,0]=2arr[1,1]=3echo "${arr[0,0]} ${arr[0,1]}" # will print 0 1如果您未将数组声明为关联的(带有-A),则上述方法将无效。例如,如果省略declare -A arr路线,echo将打印2 3的代替0 1,因为0,0,1,0并且这样将作为算术表达式和评价0(数值以逗号运算符的右侧)。

LEATH

这对我有用。# Define each array and then add it to the main oneSUB_0=("name0" "value0")SUB_1=("name1" "value1")MAIN_ARRAY=(&nbsp; SUB_0[@]&nbsp; SUB_1[@])# Loop and print it.&nbsp; Using offset and length to extract valuesCOUNT=${#MAIN_ARRAY[@]}for ((i=0; i<$COUNT; i++))do&nbsp; NAME=${!MAIN_ARRAY[i]:0:1}&nbsp; VALUE=${!MAIN_ARRAY[i]:1:1}&nbsp; echo "NAME ${NAME}"&nbsp; echo "VALUE ${VALUE}"done
打开App,查看更多内容
随时随地看视频慕课网APP