printf %s\\n "$-"
Tek harfli seçenekler tek bir dizede listelenir.
Bu parametre aşağıdaki gibi de kullanılabilir:
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
İlk önce kabuk -filename genişlemesini devre dışı bırakmak için eşzamanlı olarak $-- varsa - için bir değer kaydederken $1. Daha sonra, hiçbir +fglob oluşmaz ve son dosya adı genişletme bir kez daha etkinleştirilir ve muhtemelen devre dışı bırakılır.
Örneğin , ilk önce -fdeğer $-kaydedildiğinde ilename genişlemesi zaten devre dışı bırakılmışsa , kaydedilen değeri şöyle olacaktır (en azından) :
f
Ve böylece settekrar çalıştırıldığında, şöyle çalışır:
set +f -f
Hangi sadece seni başladığın yere geri koyar.
set +o
Tüm listeler settablo kabuk seçeneklerini (bkz Jason'ın cevabını için shoptmümkün - o da bir kelime? - seçenekler) kabuk yeniden giriş için güvenli bir biçimde. Bu şekilde şunları da yapabilirsiniz:
state=$(set +o)
set -some -crazy -options
eval "$state"
Sırasıyla kabuk seçeneklerinin durumunu kaydetmek, değiştirmek ve geri yüklemek için.
shoptİyonları ve settablo seçeneklerini tek seferde işlemek için :
state=$(set +o;shopt)
#do what you want with options here
eval "$state"
Ayrıca , kabuğun şu anda ayarlanan değişkenlerinin bir listesini eklemek için herhangi bir argüman set olmadan da çağrı yapabilirsiniz - kabuğa tekrar giriş yapmak için de verilir. Ve - bash - ayrıca typeset -fpşu anda bildirilen tüm kabuk işlevlerini de içerecek şekilde komutu ekleyebilirsiniz . Hepsini bir araya getirip evalhazır olduğunuzda toplayabilirsiniz . aliasAynısı için argümanlar olmadan bile çağrı yapabilirsiniz. Bu ... olsa da örtbas edebilir. Sanırım var "$@"- ki bunu bashyapmadan önce ilk önce bir diziye koymak zorunda kalacaksınız set.
Hayır, ayrıca var trap. Bu biraz komik. Genellikle:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
... sadece yazdırılır bu benim alt kabuktur altkabuk yeni bir süreç olup kendi belirledi alır çünkü traps - herhangi miras kalmaması ve trap- s ancak üst açıkça göz ardı ettiği bu (gibi trap '' INT) .
Ancak:
trap 'echo this is my trap' 0
save_traps=$(trap)
trapbir komut değiştirme alt kabuğunda çalıştırılan ilk ve tek komut olduğunda özel olarak davranır, çünkü şu anda ana kabuğun trapsgüvenli bir şekilde tekrar girmesi için alıntılanan bir biçimde ayarlanmış olan ana kabuğun bir listesini üretir . Yapabileceğiniz böylece Ve save_traps, daha sonra set değişkenler olmadan - dinlenme ve tüm Daha önce bahsedildiği - hemen hemen tüm kabuk durumuna kilitlenmek için. Açıkça eklemek export -pve readonly -porijinal kabuk var niteliklerini geri yüklemek isteyebilirsiniz .
Neyse, bu kadar yeter.
set +oveshopt? (shoptbir kelime yapabilmek içinsettable, man sayfasında kullanılır, bu yüzdenshoptablebenim için çalışır)