Burada, ififadelerde veya herhangi bir komutun argümanlarında ve belirli bir durumda komutta alıntı yapmak ya da değil [.
[(İçinde 's yerleşik en Bourne gibi kabuklarına rağmen) ve diğer komuta gibi kullanılabilen komut diğerleri gibi bir komut if, then, elif, elseparçaları if...fitabloların yanı sıra dış if...fitablolar.
Bourne benzeri mermilerde zsh, parametre genişlemesini tırnaksız bırakmak split + glob operatörüdür.
$FOO, $IFSkarmaşık kurallar kullanan karakterler ve dosya adı oluşturma işlemine tabi olan sonuçlarda, [tam olarak bir tane beklediği komuta değişken sayıda argüman oluşturacak şekilde bölünecektir .
Herhangi bir komutun herhangi bir argümanında olduğu gibi, bu $FOOda alıntılanması gerekir, böylece içeriği bir argüman olarak iletilir.
[değişkenlerin alıntılanmasının unutulmamasının kritik olduğu bu komutlardan biridir, çünkü bunu yapmamak birçok uygulamada keyfi bir komut enjeksiyonuna karşılık gelir (değişkenin içeriği bir saldırganın kontrolü altında olabilir).
Bu içerir [arasında yerleşik programı bash, ksh88, ksh93, pdkshve bunların türevleri ve zshve /bin/[bir sargı yaklaşık komut dosyası olarak uygulanacağı Solaris gibi bu sistemlerin ksh'in yerleşiği [.
Bunlar [bazı koşulda aritmetik ifadeleri yorumlayabilir veya kod yürütme sona erebilir değişken isimlerine çalışabilir bu kabuklarda tüm bu yerleşik komutların gibi uygulamalar.
Burada, bir örnek olarak, bashkabukta (aynı zamanda shbirkaç sistemin uygulanması olan GNU projesinin kabuğu ) ve varsayılan değeri $IFS:
bash-5.0$ FOO='-v x[$(reboot)] -o true'
bash-5.0$ if [ $FOO = "true" ]; then echo yes; fi
System rebooting now!
yes
O alıntı ve çünkü değildi çünkü $IFSvarsayılan olarak SPC karakter içeriyor, $FOOiçine bölünmüş oldu -v, x[$(reboot)], -ove true. Bunlardan sadece ikincisi glob operatörleri ( [...]) içerir . Benim durumumda, herhangi bir dosyayla eşleşmedi, bu yüzden olduğu gibi bırakıldı (Bourne benzeri kabukların başka bir özelliği, diğer kabukların çoğu globun eşleşmediğinden şikayetçi olurdu).
Yani isteyen sona erdi o [olsun $xdizi endeks için kuruldu $(reboot)ve çalışan sona erdi reboot(veya -o) olsun trueeşit olduğunu true, dolayısıyla yesçıkışı.
Daha fazla okuma: