zsh의 함수 끝에서 옵션 복원

zsh의 함수 끝에서 옵션 복원

extended_glob나는 옵션을 활성화 하고 싶은 zsh 쉘 함수(스크립트가 아닌)를 작성하고 있습니다 . 그러나 함수는 호출자의 컨텍스트에서 실행되므로 해당 설정을 훼손하고 싶지 않습니다.

내가 하고 싶은 일은 extended_glob필요한 만큼 조건부로 활성화한 다음 사용자 옵션으로 복원하는 것입니다. zsh에서 옵션이 활성화되어 있는지 확인하는 방법이 있습니까?

답변1

당신은 사용할 수 있습니다local_options옵션기능이 종료되면 자동으로 옵션을 복원합니다. 이는 귀하의 기능이 아무 것도 만들지 않는 경우에만 적합합니다.다른기능이 완료된 후에도 유지하려는 옵션 변경 사항입니다.

따라서 다음과 같이 함수를 작성할 수 있습니다.

do_something() {
  setopt local_options extended_glob
}

함수가 반환된 후에도 유지하려는 다른 옵션이 있는 경우 options연관 배열을 사용할 수 있습니다(zsh/parameter기준 치수) 개별 옵션을 쉽게 확인하고 조작하려면 다음을 수행하세요.

do_something() {
  local eg=$options[extended_glob]
  setopt extended_glob
  options[extended_glob]=$eg
}

설치 환경에서 이 모듈을 사용할 수 없는 경우 다음을 사용할 수 있습니다.-o 시험:

do_something() {
  local eg=no
  [[ -o extended_glob ]] && eg=
  setopt extended_glob
  setopt ${eg}extended_glob
}

관련 정보