İçinde bash, iki argüman bağlamında testkomut -a fileve -e fileaynıdır. Ama bir farkları var, çünkü -aaynı zamanda bir ikili operatör.
-eunary POSIX tarafından tanımlanır, ancak -aunary tanımlanmaz . POSIX yalnızca -aikili dosyayı tanımlar (bkz. Test POSIX).
POSIX üç bağımsız değişken testdavranışı tanımlar :
3 argüman:
$ 2 bir ikili birincilse, $ 1 ve $ 3 ikili testini gerçekleştirin.
1 $ '!' İse, 2 $ ve 3 $ 'lık iki argümanlı testi reddedin.
1 $ '(' ve 3 $ ')' ise, 2 $ 'lık tekli testi gerçekleştirin. XSI seçeneğini desteklemeyen sistemlerde, eğer $ 1 '(' ve $ 3 '' 'ise sonuçlar belirtilmez.
Aksi takdirde, belirtilmemiş sonuçlar üretir.
Böylece -agarip bir sonuca da yol açar:
$ [ ! -a . ] && echo true
true
-aüç argüman bağlamında ikili operatör olarak kabul edilir. Bash SSS sorusu E1'e bakın . POSIX ayrıca -aKornShell'den alındığını ancak ikili ve tekli -earasında kafa karıştırıcı olduğu için değiştirildi .-a-a
C kabuğunun sağladığı işleve benzer işlevselliğe sahip olan -e birincil, bir kabuk komut dosyasının dosyayı açmaya çalışmadan bir dosyanın var olup olmadığını bulmasının tek yolunu sağladığı için eklenmiştir. Uygulamaların ek dosya türleri eklemesine izin verildiğinden, taşınabilir bir komut dosyası şunları kullanamaz:
test -b foo -o -c foo -o -d foo -o -f foo -o -p foo
foo'nun mevcut bir dosya olup olmadığını öğrenmek için. Geçmiş BSD sistemlerinde, bir dosyanın varlığı şu şekilde belirlenebilir:
test -f foo -o -d foo
ancak mevcut bir dosyanın normal bir dosya olduğunu belirlemenin kolay bir yolu yoktu. Erken bir öneri KornShell -bir birincil (aynı anlama gelen) kullandı, ancak -e ikil operatörü ile -a birincil olanı kafa karıştırıcı insanların yüksek olasılığı hakkında endişeler olduğu için bu -e olarak değiştirildi.
-aİkili de eskimiş olarak işaretlenir, çünkü 4'den fazla argümana sahip belirsiz bir ifadeye yol açar. Bu> 4 bağımsız değişken ifadesi ile POSIX, sonucun belirtilmediğini tanımlar.