なんかハマってるなw

例えば最初がこれだとするだろ?
index=2,INFO1="a bc",INFO2="ab,c"

ダブルクォートの中にスペースが入ることがあるとして、まずスペースをありえない文字(制御文字)に変換するだろ?
index=2,INFO1="a<DEL>bc",INFO2="ab,c"

次にカンマをスペースにするだろ?
index=2 INFO1="a<DEL>bc" INFO2="ab c"

これをeval + setするだろ?
eval "set -- $DATA"

そうすると、こうなるやんか?
$1: index=2
$2: INFO1="a<DEL>bc"
$3: INFO2="ab c"

あとはループして、<DEL>をスペースに戻しつつevalすればOKだよ

文字の置換はIFS使って分割して結合
俺が悩んでたのは、実はありえない文字に変換しないで
できないかなーってところなんだよねw

>>438
そういうのは仕様。それを防ぎたかったらevalは使えないのでパースするしか無い
もしくはエスケープ+evalだけどエスケープするために結局パースが必要になる