zsh: Cara memeriksa apakah opsi diaktifkan

39

Untuk mengaktifkan opsi, kita bisa menggunakan setopt. misalnya:

setopt extended_glob

Bagaimana kita dapat memeriksa apakah opsi saat ini diaktifkan?

Sébastien
sumber

Jawaban:

42

Di zsh, Anda dapat menggunakan setoptuntuk menampilkan opsi yang diaktifkan dan unsetoptuntuk menunjukkan yang tidak diaktifkan:

$ setopt
autocd
histignorealldups
interactive
monitor
sharehistory
shinstdin
zle

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

Di bash, Anda bisa menggunakan shopt -p.

cuonglm
sumber
Perlu dicatat bahwa setopthanya mencetak opsi yang tidak diaktifkan secara default untuk mode emulasi itu.
llua
6
Anda harus menggunakan set -odaftar FULL.
Kutsan Kaplan
16

Cukup gunakan:

[[ -o extended_glob ]]

Itu juga berfungsi bash, tetapi hanya untuk opsi yang ditetapkan oleh set -o, bukan yang ditetapkan oleh shopt. zshhanya memiliki satu set opsi yang dapat diatur dengan salah satu setoptatau set -o.

Sama seperti dengan bash(atau shell POSIX), Anda juga dapat melakukan set -oatau set +omelihat pengaturan opsi saat ini.

Stéphane Chazelas
sumber
11

The zsh/parametermodul, yang merupakan bagian dari distribusi default, menyediakan array asosiatif optionsyang menunjukkan opsi yang di.

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

Untuk opsi yang memiliki alias satu huruf (yang bukan merupakan kasus extended_glob), Anda juga dapat memeriksa $-.

Perhatikan bahwa jarang berguna untuk menguji opsi mana yang diaktifkan. Jika Anda perlu mengaktifkan atau menonaktifkan opsi dalam sepotong kode, masukkan kode itu ke dalam fungsi dan atur local_optionsopsi. Anda dapat memanggil emulatebuiltin untuk mengatur ulang opsi ke kondisi default.

my_function () {
  setopt extended_glob local_options
}
another_function () {
  emulate -L zsh
  setopt extended_glob
}
Gilles 'SANGAT berhenti menjadi jahat'
sumber