하위 프로세스의 내보낸 변수를 변경하지 않는 "로컬" 기능이 있는 쉘은 무엇입니까?

하위 프로세스의 내보낸 변수를 변경하지 않는 "로컬" 기능이 있는 쉘은 무엇입니까?

다음 예에서는 export함수에서와 같이 ed 변수가 재설정됩니다. localBash, Zsh, Fish는 원시 값을 하위 프로세스에 전달하지 않습니다. local로컬 함수 본문에만 영향을 미치고 원래 exported 값을 하위 프로세스에 전달하는 쉘이 있습니까 ?

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

  1. 므케시
  2. .declare +x MY_VAR=valuelocal +xtypeset +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

직관적으로 표현되어 있어요므케시.

관련 정보