zsh: オプションが有効になっているかどうかを確認する方法

zsh: オプションが有効になっているかどうかを確認する方法

オプションを有効にするには、 を使用しますsetopt。例:

setopt extended_glob

オプションが現在有効になっているかどうかを確認するにはどうすればよいですか?

答え1

では、を使用して有効なオプションを表示し、 を使用して有効でないオプションを表示zshできます。setoptunsetopt

$ setopt
autocd
histignorealldups
interactive
monitor
sharehistory
shinstdin
zle

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

ではbash、 を使用できますshopt -p

答え2

次のように使用します:

if [[ -o extended_glob ]]; then
  echo it is set
fi

これは でも機能しますbashが、 によって設定されたオプションに対してのみ機能し、set -oによって設定されたオプションに対しては機能しませんshopt。には、または のzshいずれかで設定できるオプション セットが 1 つだけあります。setoptset -o

(または任意の POSIX シェル)と同様に、または を実行して現在のオプション設定を確認することbashもできます。set -oset +o

答え3

zsh/parameterデフォルトの配布物の一部であるモジュールは、連想配列を提供する。optionsどのオプションがオンになっているかを示します。

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

1文字のエイリアスを持つオプション( の場合を除くextended_glob)の場合は、$-

どのオプションが有効になっているかをテストすることはほとんど役に立ちません。コード内でオプションを有効または無効にする必要がある場合は、そのコードを関数に入れて、local_optionsオプション。emulateオプションをデフォルト状態にリセットするための組み込み関数です。

my_function () {
  setopt extended_glob local_options
}
another_function () {
  emulate -L zsh
  setopt extended_glob
}

答え4

() {[[ -v argv[1] && -v options[$1] ]] && echo "option <$1> is $options[$1]" || echo "no such option <$1>"  } <optname>

から<optname>https://zsh.sourceforge.io/Doc/Release/Options.html

例:

() {[[ -v argv[1] && -v options[$1] ]] && echo "option <$1> is $options[$1]" || echo "no such option <$1>"  } LOCAL_TRAPS

option <LOCAL_TRAPS> is off

() {[[ -v argv[1] && -v options[$1] ]] && echo "option <$1> is $options[$1]" || echo "no such option <$1>"  } localtraps
option <localtraps> is off

() {[[ -v argv[1] && -v options[$1] ]] && echo "option <$1> is $options[$1]" || echo "no such option <$1>"  } localtrap 
no such option <localtrap>

関連情報