unset은 무엇을합니까?

unset에 대한 다음 부분을 이해하려고합니다. div> https://unix.stackexchange.com/a/381782/674

unset bash 현재 범위에서 선언 된 경우에만 변수 설정을 해제합니다. ( 전역 범위를 제외하고 선언 된 상태로 둡니다 . 속성과 값을 제거하고 변수가 더 이상 배열이나 해시가 아닙니다. namerefs에서는 참조 된 변수를 설정 해제합니다.) 그렇지 않으면 위에서 언급 한 스택에서 하나의 변수 레이어 만 표시됩니다.

Bash 매뉴얼은 “관련된 내용을 언급하지 않거나 그리워합니다.

예시를 들어 설명해 주시겠습니까?

  • “는 다음과 같은 경우에만 변수 설정을 해제합니다. 현재 범위에서 선언되었습니다. “
  • “전역 범위를 제외하고 선언 된 상태를 유지합니다. “

    If unset 함수의 로컬 범위에있는 변수는 unset 변수가 설정되지 않았을뿐만 아니라 선언되지 않았습니까?

    전역 범위에있는 변수입니다. unset 변수가 설정되지 않았지만 여전히 선언되어 있습니까?

    변수가 다음과 같은지 어떻게 확인할 수 있습니까? 선언 여부?

  • “그렇지 않으면 위에서 언급 한 스택에서 하나의 변수 레이어 만 팝니다.”

    otherwise와 one variable layer는 무엇을 의미합니까?

감사합니다.

답변

예 :

p>

$ bash -c "a=0; f() { local -i a=1; unset a; typeset -p a; a=2; }; f; echo "$a"" declare -- a 0 

동일한 범위에서 선언 된 변수에서 호출 된 unset입니다. 제대로 설정되지 않았습니다. 속성과 값을 잃었지만 여전히 선언되어 있지만 여전히 해당 범위로 제한됩니다. a=2를 수행하더라도 f<에 로컬 인 a에서 여전히 수행됩니다. / div>, 외부 범위의 항목은 영향을받지 않습니다. 좋습니다.

In :

$ ./bash -c "a=0; f() { local a=1; g; a=2; }; g() { unset a; echo "$a"; }; f; echo "$a"" 0 2 

unset aa를 설정 해제하지 않았습니다. 대신, 그것은 아래에있는 하나, 외부 범위에있는 하나를 드러 냈습니다. g가 반환되면 f “의 a 변수가 더 이상 로컬이 아닙니다.

p>

bash 5 이상에서는 localvar_unset 옵션을 설정하여 수정할 수 있습니다.

mkshyash 여기서 unset 설정 해제 대신 팝핑 을 수행합니다. 동일한 범위에서 선언 된 변수의 경우에도 마찬가지입니다. 첫 번째 예는 다음과 같습니다.

typeset a=0 2 

추가 정보 :

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다