Кажется, вы используете Z Shell, по крайней мере описываемое вами поведение воспроизводимо там:
zsh$ echo $USERNAME
user1
zsh$ USERNAME=test
zsh$ echo $USERNAME
user1
zsh$ 
Справочная страница зшпарам дает причину:
  ИМЯ ПОЛЬЗОВАТЕЛЯ Имя пользователя, соответствующее реальному идентификатору пользователя процесса оболочки.  Если у вас есть достаточные права, вы можете изменить имя пользователя (а также идентификатор пользователя и идентификатор группы) оболочки, назначив этому параметру.
                Также (при условии наличия достаточных привилегий) вы можете запустить одну команду под другим именем пользователя (и идентификатором пользователя, и идентификатором группы) с помощью `(USERNAME = username; command) '
Таким образом, с достаточными правами, например, от имени root, это работает, но только если user1 является действительным именем пользователя:
su
zsh# echo $USERNAME
root
zsh# USERNAME=user1
zsh#  echo $USERNAME
user1
zsh# id
uid=1001(user1) gid=1000(users)   
groups=1000(users),...
И да, есть и другие специальные переменные, обратите внимание на маркировку <S> в man zshparam , но приведу лишь несколько примеров:
- $?статус выхода, возвращаемый последней командой
- $$идентификатор процесса этой оболочки
- $EGIDэффективный идентификатор группы процесса оболочки
- $SECONDSколичество секунд с момента вызова оболочки