Di bash, dengan konteks testperintah dua argumen , -a filedan -e filesama. Tetapi mereka memiliki beberapa perbedaan, karena -ajuga merupakan operator biner.
-eunary didefinisikan oleh POSIX, tetapi -aunary tidak. POSIX hanya mendefinisikan -abiner (Lihat tes POSIX).
POSIX mendefinisikan tiga testperilaku argumen :
3 argumen:
Jika $ 2 adalah biner primer, lakukan uji biner $ 1 dan $ 3.
Jika $ 1 adalah '!', Negasikan uji dua argumen dari $ 2 dan $ 3.
Jika $ 1 adalah '(' dan $ 3 adalah ')', lakukan tes unary sebesar $ 2. Pada sistem yang tidak mendukung opsi XSI, hasilnya tidak ditentukan jika $ 1 adalah '(' dan $ 3 adalah ')'.
Kalau tidak, hasilkan tidak ditentukan.
Demikian -ajuga mengarah pada hasil yang aneh:
$ [ ! -a . ] && echo true
true
-adianggap sebagai operator biner dalam konteks tiga argumen. Lihat Bash FAQ pertanyaan E1 . POSIX juga menyebutkan bahwa -adapatkan dari KornShell tetapi kemudian diubah menjadi -ekarena membuat membingungkan antara -abiner dan -aunary.
-E primer, yang memiliki fungsi serupa dengan yang disediakan oleh shell C, ditambahkan karena ia memberikan satu-satunya cara bagi skrip shell untuk mengetahui apakah ada file tanpa mencoba membuka file tersebut. Karena implementasi diizinkan untuk menambahkan jenis file tambahan, skrip portabel tidak dapat menggunakan:
uji -b foo -o -c foo -o -d foo -o -f foo -o -p foo
untuk mengetahui apakah foo adalah file yang ada. Pada sistem BSD historis, keberadaan file dapat ditentukan oleh:
test -f foo -o -d foo
tetapi tidak ada cara mudah untuk menentukan bahwa file yang ada adalah file biasa. Proposal awal menggunakan KornShell -a primer (dengan makna yang sama), tetapi ini diubah menjadi -e karena ada kekhawatiran tentang probabilitas tinggi manusia membingungkan -a primer dengan -a operator biner.
-abiner juga ditandai sebagai usang, karena mengarah ke beberapa ekspresi ambigu, yang memiliki lebih dari 4 argumen. Dengan> 4 argumen argumen ini, POSIX mendefinisikan hasilnya tidak ditentukan.