zsh: So überprüfen Sie, ob eine Option aktiviert ist

39

Um eine Option zu aktivieren, können wir verwenden setopt. z.B:

setopt extended_glob

Wie können wir überprüfen, ob eine Option derzeit aktiviert ist?

Sébastien
quelle

Antworten:

41

In zshkönnen Sie die setoptaktivierten und unsetoptnicht aktivierten Optionen anzeigen:

$ setopt
autocd
histignorealldups
interactive
monitor
sharehistory
shinstdin
zle

$ unsetopt
noaliases
allexport
noalwayslastprompt
alwaystoend
noappendhistory
autocd
autocontinue
noautolist
noautomenu
autonamedirs
.....

In bashkönnen Sie verwenden shopt -p.

cuonglm
quelle
Es ist zu beachten, dass setoptnur die Optionen gedruckt werden, die für diesen Emulationsmodus nicht standardmäßig aktiviert sind.
llua
6
Sie sollten set -ofür die vollständige Liste verwenden.
Kutsan Kaplan
16

Benutz einfach:

[[ -o extended_glob ]]

Das funktioniert auch in bash, aber nur für die von gesetzten Optionen set -o, nicht für die von gesetzten shopt. zshhat nur einen Satz von Optionen, die entweder mit setoptoder eingestellt werden können set -o.

Genau wie bei bash(oder jeder POSIX-Shell) können Sie auch die aktuellen Optionseinstellungen vornehmen set -ooder set +oanzeigen.

Stéphane Chazelas
quelle
11

Das zsh/parameterModul, das Teil der Standardverteilung ist, stellt ein assoziatives Array bereit options, das angibt, welche Optionen aktiviert sind.

if [[ $options[extended_glob] = on ]]; then 

Bei Optionen mit einem Alias ​​aus einem Buchstaben (was nicht der Fall ist extended_glob) können Sie auch prüfen $-.

Beachten Sie, dass es selten sinnvoll ist, zu testen, welche Optionen aktiviert sind. Wenn Sie eine Option in einem Code aktivieren oder deaktivieren müssen, fügen Sie diesen Code in eine Funktion ein und legen Sie die local_optionsOption fest. Sie können das emulateeingebaute Programm aufrufen, um die Optionen auf einen Standardzustand zurückzusetzen.

my_function () {
  setopt extended_glob local_options
}
another_function () {
  emulate -L zsh
  setopt extended_glob
}
Gilles 'SO - hör auf böse zu sein'
quelle