bash 4.3의 "네이티브" 내장 동작에 대한 문서화되지 않은 변경 사항이 있습니까?

bash 4.3의 "네이티브" 내장 동작에 대한 문서화되지 않은 변경 사항이 있습니까?

Bash 4.2에서는 변수가 함수에 대해 로컬로 선언되지만아니요그래도 기본값은 변수 목록에 포함됩니다. 적어도 "declare -p"에 관한 한:

vermicelli$ bash --version | grep release
GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)
vermicelli$ bash -c 'f1() { local Y; declare -p Y; }; f1'
declare -- Y
vermicelli$ 

그러나 bash 4.3에서는 더 이상 그렇지 않습니다.

lasagne$ bash --version | grep release
GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)
lasagne$ bash -c 'f1() { local Y; declare -p Y; }; f1'
bash: line 0: declare: Y: not found
lasagne$ 

이 동작 변경 사항이 어디에도 문서화되어 있나요?

기본값이 있는 경우제공된 경우(예: "local Y"를 "local Y=42"로 변경) 두 bash 버전 모두 동일하게 작동합니다.

(Bash 4.3의 매뉴얼 페이지, 특히 선언 및 로컬 내장 기능을 다루는 단락, shopt 옵션 compat42 및 FAQ, 특히 4.3의 새로운 기능을 다루는 단락을 확인했지만 다음에 대한 언급은 찾지 못했습니다. 이 동작은 변경됩니다).

답변1

Bash 변경 로그에서 발췌:

이 문서에서는 bash-4.4-alpha 버전과 이전 버전인 bash-4.3-release 간의 변경 사항을 자세히 설명합니다.

3. Bash의 새로운 기능

에프. 선언 옵션 및 유사한 내장 함수는 -p해당 변수에 아직 값이 할당되지 않은 경우에도(기술적으로 설정되지 않은) 명명된 변수의 속성을 표시합니다.


이 문서에서는 bash-4.3-alpha 버전과 이전 버전인 bash-4.2-release 간의 변경 사항을 자세히 설명합니다.

1. Bash의 변경 사항

헤헤. 속성이 지정되었지만 값이 할당되지 않은 변수를 발생시키고 찾는 declare버그 를 수정했습니다 . test해당 변수가 설정되어 있지 않습니다.

함수 내에서 호출하면 오류가 발생 하지 않는 한 이것은 local단지 별칭일 뿐입니다 .declarelocal

설정되지 않은 변수를 나열하는 것은 typeset -p버그로 간주되었지만 declare -p해당 변수를 나열했기 때문에 동작이 복원되었습니다."충분히 일반적인 요청".

관련 정보