
을 실행한 후 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
변수는 다시 포함되지 않습니다. 뭐가 문제 야?
답변1
밑줄은 실제로 특수 쉘 변수입니다. 여기에 표시되는 것은 _
값이 var=99
.인 underscore() 변수입니다. 읽기 전용이며 셸에서 유지 관리됩니다. 이것은:
- 실행 중인 셸 또는 인수 목록에 전달된 스크립트의 절대 파일 이름을 포함하여 셸이 시작될 때 설정됩니다.
- 그 이후에는 확장 후 이전 명령의 마지막 인수로 확장됩니다.
- 메일을 확인할 때 이 매개변수는 메일 파일의 이름을 보유합니다.
- 또한 실행된 각 명령의 전체 경로 이름으로 설정되고 해당 명령으로 내보낸 환경에 배치됩니다.
귀하의 예는 두 번째 범주에 속합니다. 입력한 내용은 다음과 같습니다.
set -a var=99
그래서 마지막 주장 var=99
은값설정 중입니다((으) var
로 설정되어 있지 않습니다 99
). 여튼 _
그렇게 정해져있습니다. 보고되는 내용은 다음과 같습니다.
_=var=99
약간 혼란스럽기는 하지만 첫 번째는 =
변수에 대한 할당을 나타내고 _
두 번째는 값의 일부를 나타냅니다.
-a
이 옵션의 set
결과는 다음과 같습니다 .이후에 정의된 모든 변수수출을 기다리고 있습니다.
답변2
_=
출력의 줄 시작 부분에 있는 일반 세트는 bash에 _
(밑줄)이라는 변수가 있음을 나타냅니다. 그 값은 다음과 같습니다 =
. (bash에서) test_var
라는 이름의 변수를 설정하는 것과 같습니다 .12345
$ test_var=12345
$ set | grep test_var
test_var=12345
$ declare -p test_var
test_var=12345
이 특수 bash 변수는 이전 줄의 마지막 인수로 설정됩니다.
$ echo "Testing some" "values" "in the shell" "(only bash)" "_=myvar=hello"
Testing some values in the shell (only bash) _=myvar=hello
$ echo "$_"
_=myvar=hello
$ echo "Testing some" "values" "in the shell" "(only bash)" "_=myvar=hello"
Testing some values in the shell (only bash) _=myvar=hello
$ declare -p _
declare -- _="_=myvar=hello"
참고하세요둘 =
이 출력에서.
더 긴 설명
을 실행하면 set -a var=99
,삼귀하의 질문과 관련된 다양한 일이 발생합니다.
- 변수 내보내기에 대한 옵션( )을 설정합니다
-a
(반대 작업 수행).set +a
- 위치 매개변수는 옵션 뒤에 오는 항목으로 "설정"됩니다(
$1
로 설정var=99
). - 쉘 변수 밑줄은
$_
마지막 인수(확장)로 설정됩니다.
강모
실행 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
변수 설정=99
실제로 set -- var=99
대시()로 시작하는 값이 있는 옵션을 해석하는 것을 피해야 합니다(그리고 그 수가 많습니다) -
.
인수 목록(위치 인수 목록)을 로 설정합니다 --
. 이는 모든 합리적인 쉘(csh 등 제외)에서 작동합니다. 위치 인수는 "$@"(또는 유사하게 "$*", 같지 않음)로 인쇄됩니다.
$ set -- a=1 b=2 c=3
$ echo "$@"
a=1 b=2 c=3
#_=last_argument 또한 내부 쉘 변수의 값이 _
실행된 라인의 마지막 인수로 변경됩니다. 그건아니요이는 bash를 제외한 거의 모든 쉘(jsh, ash, yash, dash, lksh, mksh, ksh93, attsh, 물론 csh 및 tcsh)에 해당됩니다.
$ 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"
답변3
정답은 사용하는 쉘에 따라 다릅니다.
- ~을 위한
bash
, @BobEager가 말한 모든 내용이 적용됩니다. - ~을 위한
zsh
, 이전 명령의 마지막 인수로만 설정되며 명령 환경에서 명령의 전체 경로 이름 - 일부 껍질은 다음과 같습니다
dash
이 변수는 대화형 세션을 실행할 때만 설정됩니다.
다른 껍질에는 다른 특산품도 있을 수 있습니다. 이렇게, $_
응한정되지 않은POSIX에서는 사용할 때 잠재적인 이식성 문제를 알고 있어야 합니다.
참고 사항: 값 99를 할당 var
하고 후속 하위 프로세스 환경에서 사용할 수 있도록 하려는 경우 이를 달성하기 위한 올바른 구문은 다음과 같습니다.
export var=99
답변4
나는
echo $var
아무것도 주어지지 않을 것이라는 것을 알았습니다. … 무슨 일이에요?
덜 작은 글씨로큰 타격(1), 우리는 발견
set
[--abefhkmnptuvxBCEHPT
] [-o
옵션 이름] [아르기닌…]
set
[+abefhkmnptuvxBCEHPT
] [+o
옵션 이름] [아르기닌…]︙
옵션을 지정하면 쉘 속성을 설정하거나 설정 해제합니다. 옵션 처리 후 남은 인수는 위치 인수의 값으로 처리되어 할당됩니다.$1
,$2
,…$n
즉, set -a var=99
환경 변수를 로 설정 하지 var
말고 로 99
설정해 보십시오 .$1
var=99
echo "$1"
echo "$*"