답변:
Z Shell을 사용하고있는 것 같습니다 . 적어도 설명하는 동작은 재현 할 수 있습니다.
zsh$ echo $USERNAME
user1
zsh$ USERNAME=test
zsh$ echo $USERNAME
user1
zsh$
zshparam 맨 페이지 에 이유가 있습니다.
USERNAME 쉘 프로세스의 실제 사용자 ID에 해당하는 사용자 이름. 충분한 권한이 있으면이 매개 변수에 지정하여 쉘의 사용자 이름 (및 사용자 ID 및 그룹 ID)을 변경할 수 있습니다. 또한 충분한 권한이 있다고 가정하면`(USERNAME = username; command) '에 의해 다른 사용자 이름 (및 사용자 ID 및 그룹 ID)으로 단일 명령을 시작할 수 있습니다.
그래서, 같은 예 충분한 권한을 가진 루트 이 작동하지만, 경우에만이 user1
A는 유효한 사용자 이름 :
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
. 몇 가지 예만 언급하십시오.
$?
마지막 명령이 리턴 한 종료 상태$$
이 쉘의 프로세스 ID$EGID
쉘 프로세스의 유효 그룹 ID$SECONDS
쉘 호출 이후의 시간 (초)#!/bin/bash
라인에 ;)
사용해야합니다 .
USER 및 LOGNAME은 envron (7) 맨 페이지에서 해결됩니다. login (1)은 이러한 변수를 설정하는 프로세스입니다 .
USER 및 LOGNAME 변수를 모두 수정할 수 있으며 나중에 액세스하면 새 값을 반환합니다.
어디에서나 USERNAME에 대한 참조를 찾으십시오.이 변수는 bash4.3에 설정되어 있지 않습니다. bash는 UID 읽기 전용 숫자 변수를 정의합니다. bash에서이 변수를 변경하려는 시도가 실패합니다.
리눅스 맨 페이지 는 USER가 "일부 BSD 파생 프로그램에서 사용된다"고 말하고 LOGNAME은 "일부 System-V 파생 프로그램에서 사용됨"과 애플 맨 페이지 주장 USER가 더 이상 사용되지 않습니다.