Кажется, вы используете 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
количество секунд с момента вызова оболочки