bashのリダイレクトについて

bashで出力内容の出力先を制御する方法として用いられるリダイレクトだが,たいへん不可解で混乱しがちだと思う.
理論的に正しいかどうかはわからないが,私なりに理解した道筋をメモしておく.

標準出力に文字列 output を出し,標準エラー出力に error を出すコマンド output_error があるとする.

$ output_error

上記を実行すると,下記のように表示される.
一行目のoutputは標準出力,二行目のerrorは標準エラー出力である.

output
error

では,下記のようにするとどうなるか.

$ output_error 2>&1 1> file.txt
error

ターミナルの表示は上記のようになり,file.txtには output が書き込まれている.

1> file.txt

は,通常は標準出力に出力されるものを file.txt に流せ,という指示である.

2>&1

は,標準エラー出力に出力されるものを標準出力に流せ,という指示だ.

これだけなら,まあそれほどわかりにくくはない(& の有無など,よくわからないところはあるにしても).
私にとって謎だったのは,上記のリダイレクト指示の順番である.
どうして 2>&1 が先なのか.こちらを先にしてしまったら,1に2の出力も流し込んでしまい,2と1がfile.txtに書き込まれてしまうのではないか.
しかし実際にはそうはならない.

私の思う整合的な理解は以下である.
1および2は,それぞれコマンド出力の番号である.
そして&1および&2は,それぞれ現在(ないしデフォルトで)1および2が割り当てられている出力先である.
つまり1と&1, 2と&2はそれぞれ別のもの(というか,コマンドの結果の出口とそれを表示する先なので,ものごとのカテゴリーが違う)と考える.
で,2>&1という指示は,2の出力を現在の1の出力先である&1に流せ,ということで,つづく1>file.txtは,1をfile.txtに流せ,ということになる.
その結果,2は&1に出て,1はfile.txtに出る,ということになる.