[ -n ]
không sử dụng -n
thử nghiệm.
Các -n
trong [ -n ]
không phải là một bài kiểm tra ở tất cả. Khi chỉ có một đối số giữa [
và ]
, đối số đó là một chuỗi được kiểm tra để xem nó có trống không. Ngay cả khi chuỗi đó có một đầu -
, nó vẫn được hiểu là một toán hạng, không phải là một bài kiểm tra. Kể từ khi chuỗi -n
là không có sản phẩm nào - nó có chứa hai ký tự, -
và n
, không zero characters--[ -n ]
đánh giá lại là true.
Như Ignacio Vazquez-Abrams nói , nơi string
là một đối số duy nhất, kiểm tra thực hiện trên string
trong cũng giống như các bài kiểm tra thực hiện trên nó bằng . Khi xảy ra , không có gì đặc biệt xảy ra. Các trong và lần thứ hai trong[ string ]
[ -n string ]
string
-n
-n
[ -n ]
-n
[ -n -n ]
chỉ đơn giản là chuỗi đang được thử nghiệm cho sự trống rỗng.
Khi chỉ có một đối số giữa [
và ]
, đối số đó luôn là một chuỗi được kiểm tra về sự không khinh suất, ngay cả khi nó xảy ra được đặt tên giống như một thử nghiệm. Tương tự như vậy, khi có hai đối số giữa [
và đối số ]
thứ nhất là -n
, đối số thứ hai luôn là một chuỗi được kiểm tra cho sự không khinh suất, ngay cả khi nó được đặt tên giống như một bài kiểm tra. Điều này chỉ đơn giản là vì cú pháp [
khẳng định rằng một đối số duy nhất giữa [
và ]
sau -n
là một toán hạng chuỗi.
Vì lý do tương tự mà [ -n ]
không sử dụng -n
thử nghiệm, [ -z ]
không sử dụng -z
thử nghiệm.
Bạn có thể tìm hiểu thêm về [
trong bash
bằng cách kiểm tra sự giúp đỡ cho nó. Lưu ý rằng đó là một vỏ dựng sẵn :
$ type [
[ is a shell builtin
Do đó, bạn có thể chạy help [
để nhận trợ giúp về nó:
$ help [
[: [ arg... ]
Evaluate conditional expression.
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
Để biết thêm thông tin, bao gồm các thử nghiệm được hỗ trợ và cách chúng hoạt động, bạn sẽ phải xem trợ giúp test
. Khi bạn chạy lệnh help test
, bạn sẽ nhận được một danh sách chi tiết. Thay vì tái tạo tất cả, đây là phần về toán tử chuỗi:
-z STRING True if string is empty.
-n STRING
STRING True if string is not empty.
STRING1 = STRING2
True if the strings are equal.
STRING1 != STRING2
True if the strings are not equal.
STRING1 < STRING2
True if STRING1 sorts before STRING2 lexicographically.
STRING1 > STRING2
True if STRING1 sorts after STRING2 lexicographically.
Lưu ý rằng -n STRING
và chỉ cần STRING
làm điều tương tự: họ kiểm tra nếu chuỗi STRING
không trống.
[ -t ]
đã kiểm tra xem thiết bị xuất chuẩn có phải là thiết bị đầu cuối (viết tắt của từ không[ -t 1 ]
) và một số shell vẫn đang thực hiện (trong trường hợpksh93
chỉ khi đó-t
là bằng chữ), vì vậy tốt hơn là sử dụng[ -n "$var" ]
hơn[ "$var" ]
. Dù rằng vẫn sẽ thất bại trong một số cũtest
triển khai cho các giá trị của$var
như=
, trong trường hợp này[ "" != "$var" ]
hay[ "x$var" != x ]
hoặccase $x in "")...
có thể tốt hơn.