Burada, if
ifadelerde 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
, else
parçaları if...fi
tabloların yanı sıra dış if...fi
tablolar.
Bourne benzeri mermilerde zsh
, parametre genişlemesini tırnaksız bırakmak split + glob operatörüdür.
$FOO
, $IFS
karmaşı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 $FOO
da 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
, pdksh
ve bunların türevleri ve zsh
ve /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, bash
kabukta (aynı zamanda sh
birkaç 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ü $IFS
varsayılan olarak SPC karakter içeriyor, $FOO
içine bölünmüş oldu -v
, x[$(reboot)]
, -o
ve 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 $x
dizi endeks için kuruldu $(reboot)
ve çalışan sona erdi reboot
(veya -o
) olsun true
eşit olduğunu true
, dolayısıyla yes
çıkışı.
Daha fazla okuma: