[ "$1" = "" ]
và [ -z "$1" ]
hoàn toàn tương đương trong bash và các shell tương thích POSIX khác. (Lưu ý rằng phải có khoảng trắng ở mỗi bên của dấu ngoặc, trừ khi có một ký tự không cấu thành từ như ;
.)
[
là một vỏ được tích hợp như bất kỳ khác; trong thực tế nó cũng có thể được đánh vần test
(sự khác biệt duy nhất giữa hai là [
yêu cầu một ]
đối số cuối cùng). Vì vậy, nếu bạn chạy [ "$1" = "" ]
với $1
mở rộng tới -z
, các nhà điều hành kiểm tra thấy ba đối số: -z
, =
và các chuỗi rỗng. Một số shell Bourne cũ hơn đôi khi đã ném các lỗi phân tích cú pháp khi một toán hạng trông giống như một toán tử theo cách này, ngay cả khi không có sự mơ hồ trong biểu thức hoàn chỉnh. Tôi không biết liệu có phiên bản nào thực sự gặp sự cố với biểu thức cụ thể này không, nhưng các biểu thức phức tạp hơn có thể loại bỏ chúng. Cũng có thể có những phiên bản gặp rắc rối với những từ trống rỗng; những điều này cũng không được hỗ trợ [ -z "$1" ]
. Một thành ngữ shell phổ biến là[ x"$1" = x"" ]
. Nó tránh mọi rủi ro khi có các toán hạng được phân tích cú pháp như các toán tử vì không có toán tử nào bắt đầu bằng một chữ cái.
Trong ksh, bash và zsh, bạn có thể sử dụng cú pháp ngoặc kép , [[ -z $1 ]]
. Cú pháp mới hơn này (từ cuối những năm 1980 thay vì giữa những năm 1970) đã loại bỏ nguy cơ các toán hạng được phân tách thành toán tử bằng cách sử dụng cấu trúc cú pháp đặc biệt thay vì tích hợp thông thường. Các toán tử phải xuất hiện theo nghĩa đen, không được trích dẫn trong dấu ngoặc kép và bạn không cần phải nhân đôi mở rộng biến.