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
}

관련 정보