Có vẻ như khi bạn làm như sau:
VAR=
test -n $VAR && echo helloworld
Nó đối xử với nó như thể tranh luận không có ở đó:
test -n && echo helloworld
Và, vì một số lý do, khi đối số không được cung cấp, nó luôn chạy lệnh sau đó (tức là nó hiển thị hellowworld). Tôi đã thử điều này trên một toán tử khác và nó cũng làm như vậy:
FILENAME=
test -f $FILENAME && echo helloworld
Tôi nghĩ rằng nếu bạn muốn có hành vi mong đợi, bạn phải trích dẫn lập luận:
VAR=
test -n "$VAR" && echo helloworld
FILE=
test -f "$FILE" && echo helloworld
Các kết quả trên không mang lại thông điệp vang vọng đến màn hình.
Như là hành vi dự kiến? Tôi không thể tìm thấy nó trong tài liệu ở bất cứ đâu, nhưng, nó có vẻ khá tái tạo và nhất quán.
[[ ... ]]
không giống như[ ... ]
biểu hiện hành vi tương tựtest
và là chức năng được đề cập trongman bash
... Trong[[ ... ]]
biến không cần phải là (. ví dụ như một "$ trích dẫn" để được công nhận là một biến arg đến[[
) ... Điều này boils xuống một trường hợp đơn giản của: biến không được trích dẫn và nó cần phải có được.