Bashがstdoutとstderrをファイル記述子3にリダイレクトする `&>&3`を許可しないのはなぜですか?

Bashがstdoutとstderrをファイル記述子3にリダイレクトする `&>&3`を許可しないのはなぜですか?

foobarプロローグ、機能、呼び出しを提供します。

exec 3>/dev/null    
function foobar { echo foo; echo bar >&2; }
foobar >/dev/null
foobar 2>/dev/null
foobar &>/dev/null
foobar &>&3

Bashが最後の単純なコマンドを実行しないのはなぜですか?対照的に、Bashが終了した場合:

-bash: syntax error near unexpected token `&'

ベストアンサー1

運営者がいないからです&>&

&> wordstdoutとstderrにリダイレクトする演算子がありますword

[n]>& wordfdからfdをコピーする演算子がありますn(デフォルト)。特別な場合で、空で数値ではない場合、stdoutとstderrはにリダイレクトされます。1wordnwordword

しかし、それはすべてです。ファイル記述子には、演算子と組み合わせることができる特別な構文はありません。オペランドをファイル記述子またはファイル名として解釈できる演算子のみがあります。そして&>&stdoutとstderrの両方をリダイレクトし、正しいオペランドをファイル記述子として解釈する演算子はありません。

&n要約:ファイル記述子には特別な構文はありません。&オペランドではなく演算子に属します。オペレーターがいません&>&

おすすめ記事