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
実装の観点から
① インプットは引数優先
- 引数を入力ファイルとして追加していく
- 引数がない間
<
ごとに入力ファイルを上書きしていく - 引数を見つけた時点でリダイレクトの入力ファイルは無視
② アウトプット先は一つ
- デフォルトは標準出力
-
>
ごとに出力先を上書きしていく
以上です!