シェルの for ループで for file in $filelist とした時の問題と対策

複数のファイルに対する処理を for ループで行うと

for file in file1 file2 ‘file3 abc’; do
  ls $file
done

のように書け、

file1
file2
file3 abc

のような結果になりますが、
ユーザが指定したファイル群に対して処理をしたいとき、for ループで次のようにすると

$filelist=”
file1
file2
‘file3 abc’

for file in $filelist; do
  ls $file
done

とすると、

file1
file2
‘file3
abc’

となってしまいます。
 
この対策として . でスペースを置換するアドホックな対応をしてみました。

filelist=”
file1
file2
‘file3 abc’

for file in ` echo “$filelist” | sed -e ‘s/\\./\\\\./g’ -e ‘s/ /./g ‘`; do # 既存の “.” は “\.” に, ” ” は “.” に置換
    file=`echo “${file}” | sed -e ‘s/\\./ /g’ -e ‘s/\\\\././g’` # 置換を元に戻す
    ls “$file” # “” で囲むのは必須
done

結果:

file1
file2
file3 abc

 
他にいい方法があれば是非御連絡を m(. .)m