Tarihsel olarak, test
komut ilk önce vardı (en azından 1979'da Unix Yedinci Baskı'ya kadar ). Bu operatörler kullanılır =
ve !=
dizeleri karşılaştırmak ve -eq
, -ne
, -lt
sayıları karşılaştırma vb. Örneğin test 0 = 00
, yanlıştır, ancak test 0 -eq 00
doğrudur. Bu sözdizimi seçildi neden bilmiyorum ama kullanmaktan kaçının olabilir <
ve >
kabuk yönlendirme operatörler olarak çözümlenen ederdik. test
Komut birkaç yıl sonra başka bir sözdizimi var: [ … ]
eşdeğerdir test …
.
[[ … ]]
Ki içinde koşullu sözdizimi, <
ve >
alıntı olmaksızın işleme olarak da kullanılabilir, ksh, daha sonra ilave edildi. Geriye dönük uyumluluğu korudu [ … ]
, bu yüzden aynı işleçleri kullandı, ancak dizeleri karşılaştırmak için <
ve ekledi >
(örneğin, [[ 9 > 10 ]]
ancak [[ 9 -lt 10 ]]
). Daha fazla bilgi için, bkz. Tek veya çift köşeli ayraç kullanma - bash
Aritmetik ifadeler de 1980'lerde bir zamanlar Korn kabuğundakitest
komutadan sonra geldi . Unix çevrelerinde çok popüler olan C dilinin sözdizimini takip ettiler. Böylece C'nin operatörlerini kullandılar: eşitlik için, daha az veya eşit için, vb.==
<=
Unix Seventh Edition'ın aritmetik ifadeleri yoktu, ancak karşılaştırma işleçleri de dahil olmak üzere tamsayı işlemleri için C benzeri bir sözdizimi uygulayan expr
komuta sahipti. Bir kabuk komut dosyası olarak, karakterler <
ve >
vardı mesela, kabuğundan onları korumak için teklif edilecek if expr 1 \< 2; …
eşdeğerdir if test 1 -lt 2; …
. Kabuğa aritmetik ifadelerin eklenmesi, expr
eskimiş olanların çoğunu kullandı , bu yüzden bugün iyi bilinmemektedir.
Bir sh komut dosyasında genellikle bir tamsayı değeri hesaplamak ve [ … ]
tamsayıları karşılaştırmak için aritmetik ifadeler kullanırsınız .
if [ "$((x + y))" -lt "$z" ]; then …
Ksh, bash veya zsh komut dosyalarında ((…))
her ikisi için de kullanabilirsiniz .
if ((x + y < z)); then …
[[ … ]]
Eğer tamsayılar başka şeyler karıştığı conditionals kullanmak istiyorsanız formu yararlıdır.
= != < <= > >=
dizeleri karşılaştırır .1 -eq 01
but1 != 01
and8 -lt 42
but8 > 42