bashを使ってシェルプログラムを作っています。

ls -l <ファイル名>

で<ファイル名>に空白が入っていると一つのファイル名と扱ってくれないので、<ファイル名>の中の空白を\ (空白の前にエスケープを付ける)ことを行っています。
しかし、調べ切れていませんが、[]や、()などもエスケープ(?)しなければいけないようなエラーが発生しています(ここがよくわかりません)

<ファイル名>を一つのファイル名として扱えるにはどのように変換すればいいのでしょうか?
また<ファイル名>を変換後のものにできるいい方法をご存知であればご教授お願いします。