Wiederherstellen einer Option am Ende einer Funktion in zsh

Wiederherstellen einer Option am Ende einer Funktion in zsh

Ich schreibe eine ZSH-Shell-Funktion (im Gegensatz zu einem Skript), bei der ich die extended_globOption wirklich gerne aktivieren würde. Da die Funktion jedoch im Kontext des Anrufers ausgeführt wird, möchte ich dessen Einstellungen nicht überschreiben.

Ich möchte es bedingt aktivieren, extended_globsolange ich es brauche, und es dann auf die Option des Benutzers zurücksetzen. Gibt es eine Möglichkeit zu überprüfen, ob eine Option in zsh aktiviert ist?

Antwort1

Du kannst den ... benutzenlocal_optionsMöglichkeitum Optionen automatisch wiederherzustellen, wenn die Funktion beendet wird. Dies wäre nur dann sinnvoll, wenn Ihre Funktion keineandereOptionsänderungen, die nach Abschluss der Funktion beibehalten werden sollen.

Sie könnten Ihre Funktion also wie folgt schreiben:

do_something() {
  setopt local_options extended_glob
}

Wenn Sie eine andere Option haben, die Sie beibehalten möchten, nachdem die Funktion zurückgegeben wurde, können Sie das optionsassoziative Array verwenden (aus demzsh/parameterModul), um einzelne Optionen einfach zu überprüfen und zu bearbeiten:

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

Wenn dieses Modul in Ihrer Installation nicht verfügbar ist, können Sie das-o prüfen:

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

verwandte Informationen