尝试从数组中获取特定信息

尝试从数组中获取特定信息

我需要转换这个数组:

arr=("aa:" "info" "{" "bb:" "name" "value" "50;" "bb:" "surname" "oth_value" "50;" "bb:" "age" "number" "3;" "bb:" "about" "text" "void;" "}")

像这样的事情:

arr=(("aa:" "info" "{") ("bb:" "name" "value" "50;") ("bb:" "surname" "oth_value" "50;") ("bb:" "age" "number" "3;") ("bb:" "about" "text" "void;") ("}"))

目标是循环遍历多维数组,以便能够对内部的每个数组执行操作。例如:

for i in "${!arr[@]}"; do
   echo "${arr[i][0]}"
   # prints out the first value of each element
   echo "${arr[i][1]}"
   # prints out the second value of each element
done

我需要的是能够分离 和 之间的信息bb:;使用它的每个元素。例如回显它。我想到的唯一想法是将所需的信息单独放在主数组内部的数组中(以创建多维),并在循环它时使用我需要的值。基本上,bb:和之间只有三个值;。但这个bb:;部分的数量是无限的。和aa: info {应该}被剪掉。我不需要它们。

答案1

arr=("aa:" "info" "{" "bb:" "name" "value" "50;" "bb:" "surname" "oth_value" "50;" "bb:" "age" "number" "3;" "bb:" "about" "text" "void;" "}")
for ((i=3; i + 4 < ${#arr[@]}; i+=4))
do
    echo "${arr[i]}"
    echo "${arr[i + 1]}"
    echo "${arr[i + 2]}"
    echo "${arr[i + 3]}"
done

这是一个简单的C 风格的 for 循环。您可以忽略任何您不想关心的字段,并更改数字。


无论这个数组最初来自哪里,通常您几乎肯定会更好地在源文本上使用适当的解析器,但这确实满足您充分描述的场景。然而,一旦变得更加复杂,它就会变得更加困难——只是因为它恰好是纯粹以四为步长,所以这个结果很简单。

相关内容