Trong bash, với bối cảnh của hai testlệnh đối số , -a filevà -e filegiống nhau. Nhưng họ có một số khác biệt, bởi vì -acũng là một toán tử nhị phân.
-eunary được định nghĩa bởi POSIX, nhưng -aunary thì không. POSIX chỉ định nghĩa -anhị phân (Xem POSIX thử nghiệm ).
POSIX định nghĩa ba testhành vi đối số :
3 đối số:
Nếu $ 2 là số chính nhị phân, hãy thực hiện kiểm tra nhị phân $ 1 và $ 3.
Nếu $ 1 là '!', Hãy phủ nhận bài kiểm tra hai đối số là $ 2 và $ 3.
Nếu $ 1 là '(' và $ 3 là ')', hãy thực hiện kiểm tra đơn phương là $ 2. Trên các hệ thống không hỗ trợ tùy chọn XSI, kết quả không được chỉ định nếu $ 1 là '(' và $ 3 là ')'.
Nếu không, tạo ra kết quả không xác định.
Vì vậy, -acũng dẫn đến kết quả kỳ lạ:
$ [ ! -a . ] && echo true
true
-ađược coi là toán tử nhị phân trong bối cảnh của ba đối số. Xem Bash FAQ câu hỏi E1 . POSIX cũng đề cập đến việc -alấy từ KornShell nhưng sau đó đã được thay đổi thành -evì nó gây nhầm lẫn giữa -anhị phân và -ađơn nguyên.
Chính -e, sở hữu chức năng tương tự như được cung cấp bởi trình bao C, đã được thêm vào vì nó cung cấp cách duy nhất cho tập lệnh shell để tìm hiểu xem một tệp có tồn tại mà không cố mở tệp không. Vì việc triển khai được phép thêm các loại tệp bổ sung, tập lệnh di động không thể sử dụng:
kiểm tra -b foo -o -c foo -o -d foo -o -f foo -o -p foo
để tìm hiểu xem foo là một tập tin hiện có. Trên các hệ thống BSD lịch sử, sự tồn tại của một tệp có thể được xác định bởi:
kiểm tra -f foo -o -d foo
nhưng không có cách nào dễ dàng để xác định rằng một tệp hiện có là một tệp thông thường. Một đề xuất ban đầu đã sử dụng KornShell -a chính (có cùng ý nghĩa), nhưng điều này đã được đổi thành -e vì có những lo ngại về khả năng cao con người nhầm lẫn giữa -a chính với toán tử nhị phân -a.
-anhị phân cũng được đánh dấu là lỗi thời, bởi vì nó dẫn đến một số biểu thức mơ hồ, có lớn hơn 4 đối số. Với biểu thức> 4 đối số này, POSIX xác định kết quả là không xác định.