リダイレクト先ファイル名に * とかを書いた場合の挙動について
shell でリダイレクト先のファイル名に * とかのパターンを書いた場合、 例えば以下のようなコマンドを実行した場合の挙動について:
$ echo hello > *.txt
shell によって動作が結構違ったので、まとめた。
| shell | 挙動 | 
|---|---|
| dash | *.txt という名前のファイルに書き込まれる | 
| openbsd sh | - パターンにマッチするファイルが一つだけならそのファイルに書き込まれる。 | 
- パターンにマッチするファイルが一つもない、 もしくは複数ファイルにマッチする場合は *.txt という名前のファイルに書き込まれる。 | |
| bash | - パターンにマッチするファイルが一つだけならそのファイルに書き込まれる。 | 
- パターンにマッチするファイルが一つもない場合は *.txt という名前のファイルに書き込まれる。 | |
| - 複数ファイルにマッチする場合はエラーとなる。 | |
| zsh[2] | - パターンにマッチするファイル全てに同じ内容が書き込まれる。 | 
| - パターンにマッチするファイルが一つもない場合はエラーとなる。 | 
リダイレクト先にはこういうの書かないほうが無難そう。
[1] MULTIOS や NOMATCH, NULL_GLOB オプション設定によって挙動が変わる。 (他にもあるかも。)
 MULTIOS や NOMATCH, NULL_GLOB オプション設定によって挙動が変わる。 (他にもあるかも。)