我需要转换这个数组:
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 循环。您可以忽略任何您不想关心的字段,并更改数字。
无论这个数组最初来自哪里,通常您几乎肯定会更好地在源文本上使用适当的解析器,但这确实满足您充分描述的场景。然而,一旦变得更加复杂,它就会变得更加困难——只是因为它恰好是纯粹以四为步长,所以这个结果很简单。