См. Спецификацию POSIX для замены псевдонима .
Замена псевдонимов происходит во время синтаксического анализа (или, по крайней мере, до оценки). Поскольку весь оператор if
является одной составной командой, которая анализируется одновременно, это означает, что x
подвергается замене псевдонима до , предыдущая команда alias
фактически определяет псевдоним и может быть заменена только псевдоним, определенный в полной командной строке перед оператором if
.
Например, рассмотрим код
alias x="echo hello"
if true; then
x
fi
После разбора это преобразуется в код
alias x="echo hello"
if true; then
echo hello
fi
и , что - это код, который фактически выполняется.
Теперь рассмотрим
alias x="echo hello"
if true; then
alias x="echo goodbye"
x
fi
x
Опять же, во время синтаксического анализа оператора if
, x
определяется как echo hello
, а не echo goodbye
. После if
анализируется и выполняется, однако, x
было переопределено, поэтому вышеприведенное эквивалентно
alias x="echo hello"
if true; then
alias x="echo goodbye"
echo hello
fi
echo goodbye