As estruturas de dados do bash são muito rudimentares para matrizes bidimensionais. Tem certeza de que esta é a ferramenta que você deseja usar?
Com o bash e o GNU grep, você pode fazer essa bagunça desagradável:
line='{machineA=[0, 1024, 4, 1028], machineB=[1, 1025, 5, 1029]}'
declare -A "$(
echo "x=("
grep -oP '(\w+)(?==)|(?<==\[).*?(?=\])' <<< "$line" |
tr -d , |
paste - - |
sed 's/^/[/; s/\t/]="/; s/$/"/'
echo ")"
)"
for key in "${!x[@]}"; do # need quotes here
for element in ${x[$key]}; do # no quotes here
printf "%s\t%s\n" "$key" "$element"
done
done
machineA 0
machineA 1024
machineA 4
machineA 1028
machineB 1
machineB 1025
machineB 5
machineB 1029
Isso é muito frágil. Eu usaria o Perl para algo assim: ainda feio, mas mais conciso
echo "$line" | perl -MData::Dumper -ne '
s/=\[/=>[/g;
eval "\$x=$_";
# do something with your data structure (a hash of arrays)
print Dumper($x)
'
$VAR1 = {
'machineB' => [
1,
1025,
5,
1029
],
'machineA' => [
0,
1024,
4,
1028
]
};