을 실행하면 set -a var=99
다음 출력에서 문장을 찾을 수 있습니다 set
.
...
TERM=xterm
UID=0
USER=root
VIRTUAL_ENV_DISABLE_PROMPT=1
_=var=99
colors=/etc/DIR_COLORS
...
누구든지 “_ =”의 의미를 말해 줄 수 있습니까?
나는 그것이 echo $var
아무 것도주지 않을 것입니다. 나는를 실행하면 set -a
, 다음은 set
다시이 변수를 포함하지 않습니다. 무슨 일이야?
답변
를 실행 set -a var=99
하면 세 가지 별개의 일이 발생합니다 (질문과 관련됨).
- vars를 내보내기 위한 설정 옵션 (
-a
) (을 수행set +a
하여 반대 ). - 위치 매개 변수는 옵션 다음에 따라
$1
설정됩니다 (로 설정var=99
). - 쉘 변수 밑줄
$_
은 마지막 매개 변수 (확장)로 설정됩니다.
설정 -a
의 실행 set -a
마크 모든 후속 (신규 또는 변경) (제외한 모든 쉘에서 수출로 변수 csh
와 어떤 관련 껍질).
$ set -a
$ myvariable=wer
$ env | grep myvariable
myvariable=wer
이 설정에서 복구하려면 다음 -
을로 변경하십시오 +
.
$ set +a
$ unset myvariable # to erase it from the environment if it
# was exported before the change of set +a
$ myvariable=456544654 # A new value of the variable.
$ env | grep "variable" # No output means the var does not exist
# in the current environment
var = 99로 설정
실제로 set -- var=99
대시 ( -
)로 시작하는 값으로 옵션 (및 세트가 많음)의 해석을 피해야 합니다.
인수 목록 (위치 매개 변수 목록)을 이후의 목록으로 설정합니다 --
. 이것은 모든 합리적인 쉘에서 유효합니다 (csh 등은 아님). 위치 인수는 “$ @”(또는 유사한 “$ *”, 같지 않음)으로 인쇄됩니다.
$ set -- a=1 b=2 c=3
$ echo "$@"
a=1 b=2 c=3
_ = 마지막 인수
그리고 내부 쉘 변수의 값은 _
실행 된 행의 마지막 인수로 변경됩니다. 즉 NOT 거의 모든 쉘에서 (JSH, 화산재, YASH, 대시, lksh, mksh, 경우 ksh93, attsh 및 코스 CSH와 tcsh에서의) bash는 제외하고 사실.
$ echo one two last argument
one two last argument
$ echo "$_"
argument
$ echo This is a new: last_argument
This is a new: last_argument
$ echo "$_"
last_argument
의 값이 있습니다 $_
확장 후 값이 :
$ a="A New_Argument"
$ echo Something else to test: "$a"
Something else to test: A New_Argument
$ echo "$_"
A New_Argument
이것이 당신이 실행할 때의 이유입니다.
$ set -a myvar=99; set | grep 'myvar'
_=myvar=99
쉘 변수 ‘$ _’에 대한 설명을 얻습니다. 이것은 또한 작동합니다 :
$ set -a myvar=99; declare -p _
declare -- _="myvar=99"
답변
밑줄은 실제로 특수 쉘 변수입니다. 여기 _
에 표시되는 값은 밑줄 ( ) 변수입니다 var=99
. 읽기 전용이며 셸에서 유지 관리합니다. 그것은:
- 인수 목록에 전달 된대로 실행중인 쉘 또는 스크립트의 절대 파일 이름을 포함하는 쉘 시작시 설정하십시오.
- 그 후, 확장 후 이전 명령에 대한 마지막 인수로 확장됩니다.
- 메일을 확인할 때이 매개 변수는 메일 파일의 이름을 보유합니다.
- 또한 실행되어 해당 명령으로 내 보낸 환경에 배치 된 각 명령의 전체 경로 이름으로 설정됩니다.
귀하의 예는 두 번째 범주에 속합니다. 입력 한 내용 :
set -a var=99
마지막 인수 그래서이 있었다 var=99
, 그리고 그것은이었다 가치 당신이 (당신이 설정되지 않은 설정되었다 var
에 99
). 따라서, 그렇게 _
설정되었습니다. 그리고 그것이보고되고 있습니다 :
_=var=99
약간 혼란 스럽지만 첫 번째 =
는 변수에 대한 할당을 나타내고 _
두 번째는 값의 일부입니다.
또한 이후에 정의 된 모든 변수 를 내보내 도록하는 -a
옵션 도 언급 할 가치 set
가 있습니다 .
답변
정답은 사용중인 쉘에 따라 다릅니다.
- for
bash
@BobEager가 적용한 모든 내용 - for
zsh
에 대해서는 이전 명령의 마지막 인수 및 명령 환경에서 명령의 전체 경로 이름으로 만 설정됩니다. dash
대화식 세션을 실행할 때만이 변수를 설정하는 것과 같은 일부 쉘
다른 껍질에도 다른 특수성이있을 수 있습니다. 이와 같이 $_
되어 정의되지 를 사용하는 경우 하나의 잠재적 이식성 문제 알고 있어야하므로, POSIX에.
참고 : 99의 값을 할당하여 var
후속 서브 프로세스 환경에서 사용할 수 있도록하려면 올바른 구문은 다음과 같습니다.
export var=99
답변
그리고 나는
echo $var
아무것도주지 않을 것입니다. … 무슨 일이야?
bash (1) 의 그리 정밀하지 않은 인쇄 에서 우리는
set
[--abefhkmnptuvxBCEHPT
] [ option-name ] [ arg …] [ ] [ option-name ] [ arg …]-o
set
+abefhkmnptuvxBCEHPT
+o
options
옵션이 지정되면 쉘 속성을 설정하거나 설정 해제합니다. 옵션 처리 후에 남아있는 인자에 순서대로 위치 매개 변수에 대한 값으로 취급되며, 할당$1
,$2
… .$n
즉, set -a var=99
환경 변수 var
를 99
;로 설정하지 않습니다 . 로 설정 $1
됩니다 var=99
. 시도 echo "$1"
또는 echo "$*"
당신은 볼 수 있습니다.