대시 및 로컬 키워드는 쉘을 재설정하지 않습니다.

대시 및 로컬 키워드는 쉘을 재설정하지 않습니다.

스프린트껍질 (다른세게 때리다그리고비지 박스 그레이두 예제 모두 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초기 값과 플래그를 상속합니다. 그렇지 않으면 변수가 처음에 설정 해제됩니다.exportedreadonly

관련 정보