この配列を変換する必要があります。
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:
では、との間には3つの値しかありません;
。しかし、これ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ループ。注目しないフィールドは無視して数字を変更できます。
この配列がもともとどこから来たかにかかわらず、通常、ソーステキストに適切なパーサーを使用することはほぼ確実に良いでしょうが、これはよく説明するシナリオを満たします。しかし、一度複雑になると、はるかに難しくなります。純粋に4段階で行われるので、この結果は簡単です。