스프린트껍질 (다른세게 때리다그리고비지 박스 그레이두 예제 모두 print foo: ''
)는 이전에 정의된 변수의 값을 취합니다. 즉, 로컬을 사용한 보호는 작동하지 않습니다.
$ foo=ee; bar() { local foo; echo "foo: '$foo'"; }; bar
foo: 'ee'
비어 있다고 선언해야 합니다.
$ foo=ee; bar() { local foo=; echo "foo: '$foo'"; }; bar
foo: ''
이것은 dash
버그(보고할 가치가 있는)입니까, 아니면 local
변수가 초기화될 것으로 예상됩니까? 로컬의 문제는 POSIX가 아니라는 것입니다.시도입니다(원천이는 서로 다른 쉘에서 구현이 얼마나 다른지 보여줍니다 local
.
답변1
관찰한 동작은 dash
셸에서 예상되는 동작과 마찬가지로 기록됩니다. 이것은 실수가 아닙니다. dash
쉘 매뉴얼 에서 :
변수가 생성되면 주변 범위에 있는 동일한 이름의 변수(있는 경우)의
local
초기 값과 플래그를 상속합니다. 그렇지 않으면 변수가 처음에 설정 해제됩니다.exported
readonly