【问题标题】:Bash Two dimensional array not persistent [duplicate]Bash二维数组不是持久的[重复]
【发布时间】:2016-05-10 02:24:20
【问题描述】:
    303   for count in "${nodeof[@]}"; do
    304       lines=`GetNodeMemory $count`
    305       printf %s "$lines" | while IFS= read -r line; do \
    306       {
    307         key=`echo $line | awk -F':' '{print $1}' | cut -d' ' -f3`
    308         [[ -z ${key} && ${key} ]] && continue
    309         for chk in "${MemVar[@]}"; do
    310             [[ "${key}" == "${chk#*:}" ]] && break
    311         done
    312         #echo "ke:${chk#*:} - ind:${chk%%:*}"
    313         NodeMem[$count,${chk%%:*}]=`echo $line \
    314               | /bin/grep -i "${key}" | awk -F':' '{print $2}' \
    315               | cut -d' ' -f2`
    316        #echo "${chk#*:} ${NodeMem[$count,${chk%%:*}]}"
    317        chk=""
    318       } done
    319   done
    320 
    321   for count in "${nodeof[@]}"; do
    322       for chk in "${MemVar[@]}"; do
    323            echo "${NodeMem[${count},${chk%%:*}]}"
    324       done
    325   done

这里的 NodeMem 是一个二维数组,如果我使用 line#316 打印,数组值打印得很好。但是,如果使用 line#323 打印,输出只是空行。这里发生了什么?感谢您的帮助。

【问题讨论】:

  • 首先,您需要开始学习如何使用 cmets。
  • 感谢@user000001,我忽略了管道,用临时文件写入/读取替换了管道机制。不幸的是,我们操作系统中的当前 bash 是 4.0,我不能使用最后一个管道选项。问题解决了。

标签: bash sh


【解决方案1】:

Bash 不支持多维数组。当您分配foo,bar 时,它会将其评估为索引0。使用您使用的语法,array[1,5] 与array[5] 相同。此外,array[2,5] 与 array[5] 相同。

请参阅上一篇关于如何伪造多维数组的帖子 Bash two dimensional arrays

【讨论】:

    猜你喜欢
    • 2014-04-30
    • 2016-09-12
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2013-01-08
    • 2017-09-20
    • 2019-06-23
    • 2018-04-23
    相关资源
    最近更新 更多