Parece que você está usando o Z Shell , pelo menos o comportamento que você está descrevendo é reproduzível lá:
zsh$ echo $USERNAME
user1
zsh$ USERNAME=test
zsh$ echo $USERNAME
user1
zsh$
A página de manual zshparam indica o motivo:
USERNAME The username corresponding to the real user ID of the shell process. If you have sufficient privileges, you may change the username (and also the user ID and group ID) of the shell by assigning to this parameter. Also (assuming sufficient privileges), you may start a single command under a different username (and user ID and group ID) by '(USERNAME=username; command)'
Portanto, com privilégios suficientes, por exemplo como root isso funciona, mas somente se user1
for um nome de usuário válido :
su
zsh# echo $USERNAME
root
zsh# USERNAME=user1
zsh# echo $USERNAME
user1
zsh# id
uid=1001(user1) gid=1000(users)
groups=1000(users),...
E sim, existem outras variáveis especiais, procure a marcação <S>
em man zshparam
, apenas para mencionar alguns exemplos:
-
$?
status de saída retornado pelo último comando -
$$
ID do processo deste shell -
$EGID
ID de grupo eficaz do processo de shell -
$SECONDS
número de segundos desde a invocação do shell