zsh: Cách kiểm tra nếu một tùy chọn được bật


39

Để kích hoạt một tùy chọn, chúng ta có thể sử dụng setopt. ví dụ:

setopt extended_glob

Làm thế nào chúng ta có thể kiểm tra nếu một tùy chọn hiện đang được kích hoạt?

Câu trả lời:


41

Trong zsh, bạn có thể sử dụng setoptđể hiển thị các tùy chọn được bật và unsetoptđể hiển thị các tùy chọn không được bật:

$ setopt
autocd
histignorealldups
interactive
monitor
sharehistory
shinstdin
zle

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

Trong bash, bạn có thể sử dụng shopt -p.


Cần lưu ý rằng setoptchỉ in các tùy chọn không được bật theo mặc định cho chế độ mô phỏng đó.
llua

6
Bạn nên sử dụng set -ocho danh sách ĐẦY ĐỦ.
Kutsan Kaplan

16

Chỉ dùng:

[[ -o extended_glob ]]

Điều đó cũng hoạt động bash, nhưng chỉ cho các tùy chọn được đặt bởi set -o, không phải cho các tùy chọn được đặt bởi shopt. zshchỉ có một bộ tùy chọn có thể được đặt bằng setopthoặc set -o.

Giống như với bash(hoặc bất kỳ vỏ POSIX nào), bạn cũng có thể thực hiện set -ohoặc set +ođể xem các cài đặt tùy chọn hiện tại.


11

Các zsh/parametermô-đun, mà là một phần của phân phối mặc định, cung cấp một mảng kết hợp optionscho biết mà lựa chọn đang ở trên.

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

Đối với các tùy chọn có bí danh một chữ cái (không phải là trường hợp extended_glob), bạn cũng có thể kiểm tra $-.

Lưu ý rằng hiếm khi hữu ích để kiểm tra tùy chọn nào được bật. Nếu bạn cần bật hoặc tắt một tùy chọn trong một đoạn mã, hãy đặt mã đó vào một hàm và đặt local_optionstùy chọn. Bạn có thể gọi emulatenội trang để đặt lại các tùy chọn về trạng thái mặc định.

my_function () {
  setopt extended_glob local_options
}
another_function () {
  emulate -L zsh
  setopt extended_glob
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.