亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Bash中的多維數組

Bash中的多維數組

縹緲止盈 2019-11-29 09:38:54
我正在計劃一個腳本來管理我的Linux系統的某些部分,并決定要使用bash還是python。我寧愿將其作為Bash腳本來執行,僅僅是因為命令更簡單,但真正的決定因素是配置。我需要能夠在配置文件中存儲多維數組,以告訴腳本如何處理自身。使用bash將簡單的key = value對存儲在配置文件中非常容易,但是我能想到的做多維數組的唯一方法是兩層解析引擎,例如array=&d1|v1;v2;v3&d2|v1;v2;v3但是marshall / unmarshall代碼可能會變得很笨拙,并且對于下一個必須執行此操作的較差的樹液而言,它與用戶友好相去甚遠。如果我不能在bash中輕松做到這一點,我將簡單地將配置寫入xml文件,然后用python編寫腳本。有什么簡單的方法可以做到這一點嗎?感謝大家。
查看完整描述

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[@]}"


查看完整回答
反對 回復 2019-11-29
?
MMTTMM

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(數值以逗號運算符的右側)。


查看完整回答
反對 回復 2019-11-29
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

這對我有用。


# 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


查看完整回答
反對 回復 2019-11-29
  • 3 回答
  • 0 關注
  • 1134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號