シェル変数をクオートしない場合は単語分割とパターン展開される
シェルの変数は基本的にダブルクオートして使うほうがいい。ダブルクオートしない場合には以下2つの機能が有効になる。
- IFS による単語分割
- ファイル名のパターン展開
IFSによる単語分割
Section titled “IFSによる単語分割”これは、変数を評価するときに、複数の単語として分割されるということ。
files='a.txt b.txt'for i in $filesdo echo $idoneただし、files にスペースを含むファイルが必要になると使えなくなるので、bash なら配列を使うほうがいいだろう。
files=(a.txt b.txt 'mix env')for i in "${files[@]}"do echo $idoneファイル名のパターン展開
Section titled “ファイル名のパターン展開”変数の値に * や ? などファイルグロブが含まれていたら展開される。
pattern='*.txt'echo $patternこれも現代なら配列にするほうがいいと思う。マッチしたファイル名にスペースが含まれていてもスペースをファイル名の一部として扱える。
pattern='*.txt'shopt -s nullglobfiles=($pattern) # スペースが含まれていてもいいfor i in "${files[@]}"do echo $idone