Sim, o comportamento é esperado. A razão é simplesmente que você usou aspas duplas ( "…"
) ao definir o alias, permitindo a substituição de parâmetros. Isso levou a que $VARIABLE_B
fosse substituído no momento da definição do pseudônimo, em vez de sua execução.
Essencialmente, ao escrever
VARIABLE_B="original"
alias my_alias="print $VARIABLE_B"
zsh
substituirá $VARIABLE_B
antes de executar o comando alias
da seguinte forma:
alias my_alias="print original"
Portanto, o alias my_alias
sempre será substituído por print original
antes da execução.
Se você quiser substituir um parâmetro em tempo de execução, é necessário citá-lo com aspas simples ( '…'
) ou citando $
com \
:
alias my_alias='print $VARIABLE_B'
alias my_alias="print \$VARIABLE_B"
Isso definirá o alias para que o nome da variável permaneça como parte do comando e o alias my_alias
seja realmente substituído por print $VARIABLE_B
antes da execução.
Em contraste, os parâmetros dentro de uma definição de função não precisam ser citados explicitamente, eles são sempre substituídos apenas em tempo de execução.
Então, ao escrever
my_function () {
{
print $VARIABLE_A
}
isto é exatamente o que será armazenado. Ao executar my_function
$VARIABLE_A
será substituído com o valor que tem naquele momento.