Dynamic scope
Dynamic scope는
- name lookup이 source code에서 정의된 위치에 의해 결정되는 Lexical scope와 달리,
- runtime의 function call chain에 의해 결정되는 방식임.
어떤 name이 실제로 어떤 object를 가리키는지는
- 해당 function이 어디에 정의되었는지가 아니라,
- 현재 어떤 function이 어떤 function을 호출했는지에 따라 달라지게 됨.
Bash에서의 dynamic scope
Bash function의 local variable lookup 은 Dynamic scope 방식으로 동작함.
- Bash에서는
localvariable이 선언된 function 내부에서만 보이는 것이 아니라, - 해당 function이 호출한 하위 function에서도 보일 수 있음.
따라서 Bash의 local은 Python, C 의 일반적인 lexical local variable과 다르게 동작함.
예제코드
#!/usr/bin/env bash
x="global"
foo() {
echo "foo: x=$x"
}
bar() {
local x="bar-local"
foo
}
foo
bar
foo
출력은 다음과 같음:

코드 해석
처음 foo를 호출하면 foo() 안의 x는 global variable x를 가리킴.
foo
따라서 다음이 출력됨.
foo: x=global
이후 bar를 호출하면 bar() 내부에서 local x="bar-local"이 선언됨.
bar() {
local x="bar-local"
foo
}
그리고 bar()는 내부에서 foo()를 호출함.
이때 실행 흐름은 다음과 같음.
bar -> foo
Bash에서는 bar()의 local variable x가 bar()가 호출한 하위 function인 foo()에서도 보임.
따라서 foo() 안의 x는 global x가 아니라,bar()의 local variable x를 가리킴.
그래서 다음이 출력됨.
foo: x=bar-local
마지막으로 bar() 실행이 끝난 뒤 다시 foo()를 호출하면,bar()의 local variable x는 더 이상 유효하지 않음.
따라서 foo() 안의 x는 다시 global variable x를 가리킴.
foo: x=global
요약
- Bash에서는
localvariable이 선언된 function뿐 아니라, 그 function이 호출한 하위 function에서도 접근 가능함. - 따라서 Bash function의 local variable lookup은 Lexical scope가 아니라 runtime call chain을 따르는 Dynamic scope 방식으로 동작함.
즉,
foo()가 어디에 정의되었는지가 아니라,foo()가 어떤 function에 의해 호출되었는지가 name lookup에 영향을 줌.
같이 보면 좋은 자료들
Lexical Scope 에 대한 설명을 Python을 기준으로 한 글:
2023.07.15 - [Python] - [Python] scope와 키워드 global, nonlocal
[Python] scope와 키워드 global, nonlocal
Python에서 scope는namespace 와 밀접하게 관련이 있는 개념이며,이와 관련된 주요 키워드가 nonlocal과 global이 있음.더보기https://dsaint31.tistory.com/entry/Basic-namespace-frame-and-context(구현등을 고려한 설명) [Ba
ds31x.tistory.com
'Python' 카테고리의 다른 글
| Python String Literal Concatenation (0) | 2026.05.23 |
|---|---|
| tqdm 간단 사용법 (0) | 2026.05.23 |
| uv 를 통한 wheel 빌드하기-uv_build, hatchling (0) | 2026.05.04 |
| pip install 옵션 정리 (0) | 2026.05.03 |
| [VSCode] # %% : Code Cell Marker (1) | 2026.04.19 |