다음 예에서는 export
함수에서와 같이 ed 변수가 재설정됩니다. local
Bash, Zsh, Fish는 원시 값을 하위 프로세스에 전달하지 않습니다. local
로컬 함수 본문에만 영향을 미치고 원래 export
ed 값을 하위 프로세스에 전달하는 쉘이 있습니까 ?
function the_func {
local MY_VAR="new value"
echo "=== $MY_VAR" # === prints "new value"
my -child -process # === gets MY_VAR="original"
}
export MY_VAR="original"
the_func
서브셸과 읽기 전용 변수는 충분하지 않습니다. 왜냐하면 이러한 변수는 서브셸 외부에서도 필요하기 때문입니다. 명령의 인수나 이름은 하위 프로세스로 분류될 수 있는 변수에 포함될 수 있습니다.
답변1
- 므케시
- .
declare +x MY_VAR=value
local +x
typeset +x
그러나 Bash에서는 다음 조건에서 실패합니다.
my_func () {
local +x MY_VAR="..."
bash my.sh # ERROR in Bash: this gets "original" instead of "2nd def"
# Works in mksh: "2nd def" is passed.
}
export MY_VAR="original"
MY_VAR="2nd def" my_func
직관적으로 표현되어 있어요므케시.