Почему это случайность истории, нет веских причин для этого.
Операторы перенаправления применяются к любой программе (например, cat
), и была добавлена форма >&
, чтобы выразить «дубликат дескриптора файла 1 из 2», потому что это было полезно. Синтаксис >&
, вероятно, использовался, потому что у них заканчивались специальные символы, а >&
был бессмысленным, учитывая базовое значение &
и >
(но не цитируйте меня по этому поводу). Все это относится к ранней оболочке Борна, примерно в 1977 году.
Почему exec
плюс перенаправление для изменения входа и выхода текущей оболочки? Возможно, потому, что уже было значение для пустой команды > path
, которая имела тот же эффект, что и cat /dev/null > path
, но ее было легче набирать, и когда ваш телетайп работал в лучшем случае со скоростью 10 символов в секунду, это имело значение. Таким образом, встроенный exec
был перегружен: без аргументов он применил к себе операции перенаправления.
Поскольку bash старается придерживаться конвенции оболочки Bourne в максимально возможной степени, вы получаете эти древности, о которых, как вы подозреваете, вам просто нужно помнить, особенно если вы пытаетесь произвести впечатление на других представителей соответствующего пола (т.е. парень, который знает свое перенаправление ввода / вывода ").