Với một xấp xỉ đầu tiên, 0 là thành công, khác không là thất bại, với 1 là thất bại chung và bất cứ điều gì lớn hơn một là một thất bại cụ thể. Ngoài các trường hợp ngoại lệ tầm thường về sai và kiểm tra, cả hai đều được thiết kế để đưa ra 1 cho thành công, có một vài trường hợp ngoại lệ khác mà tôi tìm thấy.
Thực tế hơn, 0 có nghĩa là thành công hoặc có thể thất bại, 1 có nghĩa là thất bại chung hoặc có thể thành công, 2 có nghĩa là thất bại chung nếu cả 1 và 0 đều được sử dụng cho thành công, nhưng cũng có thể thành công.
Lệnh diff cho 0 nếu các tệp được so sánh là giống hệt nhau, 1 nếu chúng khác nhau và 2 nếu nhị phân khác nhau. 2 cũng có nghĩa là thất bại. Lệnh less đưa ra 1 cho thất bại trừ khi bạn không cung cấp đối số, trong trường hợp đó, nó thoát 0 mặc dù thất bại.
Lệnh nhiều hơn và lệnh chính tả cung cấp 1 cho thất bại, trừ khi thất bại là kết quả của sự cho phép bị từ chối, tệp không tồn tại hoặc cố gắng đọc một thư mục. Trong bất kỳ trường hợp nào, chúng thoát 0 mặc dù không thành công.
Sau đó, lệnh expr cho 1 cho thành công trừ khi đầu ra là chuỗi rỗng hoặc 0, trong trường hợp này, 0 là thành công. 2 và 3 là thất bại.
Sau đó, có những trường hợp thành công hay thất bại là mơ hồ. Khi grep không tìm thấy mẫu, nó sẽ thoát 1, nhưng nó thoát 2 vì lỗi chính hãng (như quyền bị từ chối). Klist cũng thoát 1 khi không tìm được vé, mặc dù điều này thực sự không phải là một thất bại nữa so với khi grep không tìm thấy một mẫu hoặc khi bạn là một thư mục trống.
Vì vậy, thật không may, các quyền hạn unix dường như không thực thi bất kỳ bộ quy tắc logic nào, ngay cả trên các tệp thực thi được sử dụng rất phổ biến.