No Bourne Shell, as atribuições de variáveis antes de qualquer tipo de comando interno afetam todo o shell.
Como David Korn começou a criar um Bourne Shell aprimorado com muitos recursos internos antes de adicionar a edição do histórico, pode ter sido óbvio para ele que esse comportamento é um problema.
Como resultado, o ksh88 se comporta de maneira diferente e esse comportamento tornou-se o mestre dos novos padrões POSIX.
A regra atual é:
-
VAR=value
antes de umspecial builtin
afetar todo o shell -
VAR=value
antes de qualquer outro comando afetar apenas este comando, mesmo se for um comando interno.
Seu erro foi executar seus testes com um special builtin
.
Se você deseja obter uma lista de especialidades especiais, você pode, por exemplo, chame builtin -s
no Schily Bourne Shell
.
Se você fez seus testes com um conteúdo diferente, por exemplo, com o comando cd
, você teria visto resultados diferentes, já que a atribuição da variável só sobreviveria ao comando cd
se o teste fosse executado em um Bourne Shell clássico.
Observe, no entanto, que POSIX permite, mas não requer, que um shell mantenha o ambiente com special builtins
. Se você gosta de obter o mesmo comportamento para todos os builtins (mesmo builtins especiais), você pode prefixar o nome do builtin por command
.