O manual do bash diz "O ambiente para qualquer comando ou função simples pode ser aumentado temporariamente prefixando-o com atribuições de parâmetros". Eu também entendo que variáveis exportadas são passadas por padrão para subprocessos que o bash cria. Estou testando alguns comportamentos com variáveis não exportadas, e o que eu não entendo é como isso funciona quando as atribuições são seguidas pelo operador ';', e então alguns outros comandos são executados.
Meu caso é o seguinte:
VAR=hello; echo $VAR
imprime "olá".
VAR=hello :; echo $VAR
imprime uma nova linha.
VAR=hello; echo $VAR; bash -c 'echo $VAR'
imprime "olá" e uma nova linha.
A questão é, no primeiro e terceiro comando, por que VAR está sendo expandido? Eles são comandos diferentes, com (aparentemente) nenhuma atribuição de parâmetro prefixada.
PS: Tentei no bash 4.4.20 e 5.1.16 e o comportamento foi o mesmo em ambos.