`[EXPRESSION], [] và [OPTION` nghĩa là gì trong` man test`?


8

Kiểm tra man test, tôi thấy rằng dưới tóm tắt cho testcác khả năng test EXPRESSIONtest.

[ EXPRESSION ], [ ] and [OPTIONnghĩa là gì dưới đây?

Tại sao dấu ngoặc rỗng và tại sao [OPTIONbỏ lỡ dấu ngoặc? Ai đó có thể giải thích điều này cho tôi?

NAME
       test - check file types and compare values

SYNOPSIS
       test EXPRESSION
       test

       [ EXPRESSION ]
       [ ]
       [ OPTION

Câu trả lời:


10

[một tên khác cho test. Tất cả ba dòng này là dòng lệnh chạy testvới một số tùy chọn.

Trong dòng đầu tiên, đây là thử nghiệm tiêu chuẩn: [ 5 -gt 4 ]giống như test 5 -gt 4.

Trong lần thứ hai, biểu thức được bỏ qua, có nghĩa là thoát false ( 0 arguments: Exit false (1)).

Đối với trường hợp thứ ba, tôi đoán là, sử dụng lõi GNU. Trong GNU testvăn bản trợ giúp chứa ghi chú này:

NOTE: [ honors the --help and --version options, but test does not.
test treats each of those as it treats any other nonempty STRING.

Đây là một phần mở rộng không POSIX ; động lực dường như được testyêu cầu để coi những đối số đó là các chuỗi như bất kỳ đối số nào khác. [có thể phân biệt trường hợp tùy chọn với trường hợp chuỗi bằng sự hiện diện của ]khung đóng .

Lưu ý rằng vỏ của bạn có thể sẽ cung cấp riêng [, và vì vậy bạn sẽ phải /bin/\[sử dụng phiên bản này.


4

[giống như testmột vỏ được tích hợp trên một số vỏ.

Nếu bạn nhìn xuống dưới man test, nó mô tả những gì hợp lệ EXPRESSIONbạn có thể kiểm tra với:

Một EXPRESSION bị bỏ qua mặc định là sai. Mặt khác, EXPRESSION là đúng hoặc sai và đặt trạng thái thoát. Nó là một trong: ...

Điều này có thể không được rõ ràng cho bạn từ những người đàn ông trang, nhưng trong cũ / một số tiện ích khác, cả hai [testcó sẵn như là lệnh thực tế, có nghĩa là không gian mà bạn thấy trong [ EXPRESSION ]bắt buộc cho EXPRESSIONđể được chấp nhận như là một lập luận cho [/ test. Do đó, ngay cả đối với các shell cung cấp chúng dưới dạng dựng sẵn, chúng vẫn giữ định dạng này để tương thích.

Và như được giải thích trong câu trả lời của @ dr01 trong khi tôi gõ cái này, dấu ngoặc vuông bên phải là tùy chọn.


@don_crissti cảm ơn vì đã đề phòng, tôi nghĩ rằng tôi chỉ đơn giản là bỏ qua câu cuối cùng đó ...
hjk

0

[ OPTION không thực sự thiếu một khung.

Trong thực tế, có lẽ đáng ngạc nhiên, [là một lệnh (nằm trong /usr/bin/[) tương đương với test. Do đó, (về mặt lý thuyết), chỉ được phép sử dụng khung bên trái, với khung bên phải đóng vai trò là đường cú pháp. Tuy nhiên, phiên bản vỏ mới hơn yêu cầu nó .


Có sự khác biệt nào khác giữa những điều này hơn là testkhông thể được sử dụng với một tùy chọn (không được liệt kê với khả năng đó).
Shuzheng

1
Người ta không được phép bỏ qua các khung phải, hoặc trong POSIX hoặc GNU [.
Michael Homer

@MichaelHome Có. Đã sửa.
dr_

Tôi không chắc Bash phải làm gì với điều này ...
Michael Homer

1
@MichaelHomer, trong POSIX, hành vi nếu bạn bỏ qua khung bên phải không được chỉ định, do đó, tập lệnh POSIX không được phép bỏ qua ], nhưng POSIX [có thể thực hiện những gì nó muốn bao gồm gọi tên bạn và khởi động lại máy hoặc in thông báo trợ giúp nếu bạn gọi nó mà không có nó Cho phép GNU grep's [ --version. test --version[ --version ]tuy nhiên được yêu cầu trả về true (kiểm tra --versionlà chuỗi không trống) và không xuất ra kết quả nào.
Stéphane Chazelas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.