いつも無駄にIFS変更とかしていたので。
結論
eval ARRAY=("$(ls --quoting-style=shell)")
--quoting-style=shell
を指定すると必要に応じて'
でクォートしてくれるため、
スペースや特殊文字に気を使わなくてよくなります。
動作考察
内部的には大体こんな感じで動作しているようです。
file name1
、file name2
というファイルがある場合。
① 初期状態
eval ARRAY=("$(ls --quoting-style=shell)")
② プロセス置換
eval ARRAY=('file name1' 'file name2')
③ evalによる再評価
ARRAY=('file name1' 'file name2')
気になる場合はset -xv
して追いかけてみてください。
補足
「必要に応じて」と書きましたが「ファイル名にスペースはアスタリスクなど、特殊な文字が入っていた場合」
と考えれば良いと思います。
そのあたりの曖昧さが気に入らない場合、--quoting-style
はshell-always
指定でもよいです。ファイル名がどんな文字かに関わらず'
でクォートしてくれます。
eval ARRAY=("$(ls --quoting-style=shell-always)")
隠しファイル(ファイル名が.
で始まるファイル)も対象にする場合は-A
で。
eval ARRAY=("$(ls -A --quoting-style=shell-always)")