memo

2015-08-29

リダイレクト先ファイル名に * とかを書いた場合の挙動について

shell でリダイレクト先のファイル名に * とかのパターンを書いた場合、 例えば以下のようなコマンドを実行した場合の挙動について:

$ echo hello > *.txt

shell によって動作が結構違ったので、まとめた。

shell挙動
dash*.txt という名前のファイルに書き込まれる
openbsd sh- パターンにマッチするファイルが一つだけならそのファイルに書き込まれる。
- パターンにマッチするファイルが一つもない、 もしくは複数ファイルにマッチする場合は *.txt という名前のファイルに書き込まれる。
bash- パターンにマッチするファイルが一つだけならそのファイルに書き込まれる。
- パターンにマッチするファイルが一つもない場合は *.txt という名前のファイルに書き込まれる。
- 複数ファイルにマッチする場合はエラーとなる。
zsh[2]- パターンにマッチするファイル全てに同じ内容が書き込まれる。
- パターンにマッチするファイルが一つもない場合はエラーとなる。

リダイレクト先にはこういうの書かないほうが無難そう。

[1]

MULTIOSNOMATCH, NULL_GLOB オプション設定によって挙動が変わる。 (他にもあるかも。)

[2]

MULTIOSNOMATCH, NULL_GLOB オプション設定によって挙動が変わる。 (他にもあるかも。)