printf %s\\n "$-"
Sẽ liệt kê các tùy chọn chữ cái duy nhất trong một chuỗi.
Tham số đó cũng có thể được sử dụng như:
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
Trước tiên, để tắt -fmở rộng ilename shell trong khi đồng thời lưu một giá trị cho $-- nếu có - trong $1. Tiếp theo, không có hiện +ftượng ảm đạm nào xảy ra và lần mở rộng ilename cuối cùng được kích hoạt một lần nữa và có thể cũng bị vô hiệu hóa.
Ví dụ: nếu -fmở rộng ilename đã bị vô hiệu hóa khi giá trị cho $-lần đầu tiên được lưu, thì giá trị được lưu của nó sẽ là (ít nhất) :
f
Và khi setđược chạy lại, nó hoạt động để:
set +f -f
Mà chỉ đưa bạn trở lại nơi bạn bắt đầu.
set +o
Sẽ liệt kê tất cả các settùy chọn vỏ bảng (xem câu trả lời của Jason cho shoptkhả năng - đó có phải là một từ không? - tùy chọn) ở dạng an toàn cho việc thử lại vỏ. Theo cách đó, bạn cũng có thể làm:
state=$(set +o)
set -some -crazy -options
eval "$state"
Để lưu, thay đổi và khôi phục trạng thái của tùy chọn shell tương ứng.
Để xử lý shoptcác settùy chọn ion và bảng trong một lần:
state=$(set +o;shopt)
#do what you want with options here
eval "$state"
Bạn cũng có thể gọi set mà không có bất kỳ đối số nào để thêm danh sách tất cả các biến được đặt hiện tại của shell - cũng được trích dẫn để nhập lại vào shell. Và bạn có thể - trong bash - thêm lệnh typeset -fpđể bao gồm tất cả các hàm shell hiện được khai báo. Bạn có thể gộp tất cả lại với nhau và evalkhi sẵn sàng. Bạn thậm chí có thể gọi aliasmà không cần đối số cho nhiều hơn cùng. Điều đó ... có thể bao gồm nó, mặc dù. Tôi đoán là có "$@"- mà bạn phải đặt vào một bashmảng trước, tôi cho rằng, trước khi làm set.
Không, cũng có trap. Điều này một chút buồn cười. Thông thường:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
... sẽ chỉ in đây là subshell của tôi bởi vì subshell là một tiến trình mới và có tập hợp traps của riêng nó - và do đó không thừa kế bất kỳ traps nào ngoài những cái mà cha mẹ của nó đã bỏ qua rõ ràng - (như trap '' INT) .
Tuy nhiên:
trap 'echo this is my trap' 0
save_traps=$(trap)
traphành xử đặc biệt khi nó là lệnh đầu tiên và duy nhất chạy trong một lớp con thay thế lệnh trong đó nó sẽ sao chép một danh sách các shell cha hiện đang được đặt trapsở định dạng được trích dẫn để thử lại an toàn cho shell. Và vì vậy, bạn có thể thực hiện save_traps, sau đó set không cần đối số - và tất cả phần còn lại đã được đề cập - để có được một khóa trên tất cả trạng thái shell. Tuy nhiên, bạn có thể muốn thêm export -pvà readonly -pkhôi phục các thuộc tính var shell gốc.
Dù sao, thế là đủ.
set +ovàshopt? (nhưshoptcó thể là một từ,settableđược sử dụng trong trang man, vì vậy nóshoptablehoạt động với tôi)