İçinde bash
, iki argüman bağlamında test
komut -a file
ve -e file
aynıdır. Ama bir farkları var, çünkü -a
aynı zamanda bir ikili operatör.
-e
unary POSIX tarafından tanımlanır, ancak -a
unary tanımlanmaz . POSIX yalnızca -a
ikili dosyayı tanımlar (bkz. Test POSIX).
POSIX üç bağımsız değişken test
davranışı 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 -a
garip 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 -a
KornShell'den alındığını ancak ikili ve tekli -e
arası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.