24.2를 읽은 후 . 지역 변수는 , 내가 변수 선언 생각 var
키워드가 local
의미하는 것을 var
의 값이 함수의 중괄호로 구분 코드 블록 내에서만 액세스 할 수있었습니다.
그러나 다음 예제를 실행 한 후, 나는 그가 발견 var
도 읽고, 액세스 코드의 블록에 의해 호출 기능에서 쓸 수 있습니다 - 즉,이 비록 var
선언 local
에 outerFunc
, innerFunc
여전히 그것을 읽고 그 값을 변경 할 수 있습니다.
#!/usr/bin/env bash
function innerFunc() {
var='new value'
echo "innerFunc: [var:${var}]"
}
function outerFunc() {
local var='initial value'
echo "outerFunc: before innerFunc: [var:${var}]"
innerFunc
echo "outerFunc: after innerFunc: [var:${var}]"
}
echo "global: before outerFunc: [var:${var}]"
outerFunc
echo "global: after outerFunc: [var:${var}]"
산출:
global: before outerFunc: [var:] # as expected, `var` is not accessible outside of `outerFunc`
outerFunc: before innerFunc: [var:initial value]
innerFunc: [var:new value] # `innerFunc` has access to `var` ??
outerFunc: after innerFunc: [var:new value] # the modification of `var` by `innerFunc` is visible to `outerFunc` ??
global: after outerFunc: [var:]
Q : 내 셸에 버그 (bash 4.3.42, Ubuntu 16.04, 64 비트)입니까, 아니면 정상적인 동작입니까?
편집 : 해결되었습니다. @MarkPlotnick이 지적했듯이 이것은 실제로 예상되는 동작입니다.
var
이 비어있는 것이 이상하다고 생각하는 유일한 사람 입니까? var
에 전역 적으로 설정되어 innerFunc
있으므로 스크립트가 끝날 때까지 지속되지 않는 이유는 무엇입니까?