Bashのファイルリダイレクトの優先順位 ('>' | '>>' | '<') について


bashでの> >> <の扱い

minishellの実装にあたり、bashの最もシンプルな> >> <の3つのファイル出入力リダイレクトの仕様をまとめました。

< <<: ファイルのインプット (上書き、追記)

① 引数は複数指定可能

$ cat aaa.txt bbb.txt
aaa
bbb 
② リダイレクトは最後が一つだけ読み込まれる
$ cat < aaa.txt < bbb.txt 
bbb
③ 引数とリダイレクトだと引数が優先
$ cat < aaa.txt bbb.txt 
bbb
$ cat aaa.txt < bbb.txt 
aaa
$ cat < aaa.txt bbb.txt < ccc.txt 
bbb

> : ファイルのアウトプット

① アウトプットは最後のファイルのみ実行される
$ cat aaa.txt bbb.txt > output1.txt > output2.txt 
$ cat output1.txt
$ cat output2.txt
aaa
bbb
② アウトプットはどこに書いてもいい
$ cat > output1.txt aaa.txt bbb.txt
$ cat output1.txt
aaa
bbb
$ cat aaa.txt > output1.txt bbb.txt
$ cat output1.txt
aaa
bbb

実装の観点から

① インプットは引数優先

  • 引数を入力ファイルとして追加していく
  • 引数がない間<ごとに入力ファイルを上書きしていく
  • 引数を見つけた時点でリダイレクトの入力ファイルは無視

② アウトプット先は一つ

  • デフォルトは標準出力
  • >ごとに出力先を上書きしていく

以上です!