LoginSignup
8
8

More than 5 years have passed since last update.

bash で ls 結果を配列に入れる

Last updated at Posted at 2015-06-09

いつも無駄にIFS変更とかしていたので。

結論

eval ARRAY=("$(ls --quoting-style=shell)")

--quoting-style=shellを指定すると必要に応じて'でクォートしてくれるため、
スペースや特殊文字に気を使わなくてよくなります。

動作考察

内部的には大体こんな感じで動作しているようです。
file name1file name2というファイルがある場合。

① 初期状態
    eval ARRAY=("$(ls --quoting-style=shell)")
② プロセス置換
    eval ARRAY=('file name1' 'file name2')
③ evalによる再評価
    ARRAY=('file name1' 'file name2')

気になる場合はset -xvして追いかけてみてください。

補足

「必要に応じて」と書きましたが「ファイル名にスペースはアスタリスクなど、特殊な文字が入っていた場合」
と考えれば良いと思います。

そのあたりの曖昧さが気に入らない場合、--quoting-styleshell-always指定でもよいです。ファイル名がどんな文字かに関わらず'でクォートしてくれます。

eval ARRAY=("$(ls --quoting-style=shell-always)")

隠しファイル(ファイル名が.で始まるファイル)も対象にする場合は-Aで。

eval ARRAY=("$(ls -A --quoting-style=shell-always)")
8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8