/ Usr / bin / [và tôi sử dụng nó như thế nào?


26

Tôi đã xem xét coreutils và thấy đây là một trong những tệp được bao gồm như một phần của coreutils : /usr/bin/[. Nó là [gì và nó làm gì?

Nó là một thực thi. Tôi chỉ không biết nó làm gì hoặc sử dụng nó như thế nào.

$ file / usr / bin / [
/ usr / bin / [: ELF 32-bit LSB thực thi, Intel 80386, phiên bản 1 (SYSV), được liên kết động (sử dụng libs được chia sẻ), cho GNU / Linux 2.6.15, bị tước

Khi tôi cố chạy nó, tôi nghĩ rằng nó được mặc định là bash được tích hợp sẵn trong dòng mở rộng. Thay vì thực sự chạy tập tin.

$ "/ usr / bin / ["
/ usr / bin / [: mất tích ] ']' $ /usr/bin/\[
/usr/bin/[: missing



2
man [hoạt động trên OS X.
Daniel Beck

Câu trả lời:


33

Nó tương đương với lệnh test. (Xem info test.) Nói chung, bạn sử dụng nó trong các tập lệnh trong các biểu thức điều kiện như:

if [ -n "$1" ]; then
    echo $1
fi

Khung đóng là cần thiết để kèm theo điều kiện. (Chà, có vẻ như nó được yêu cầu chỉ để trông đẹp hơn trong mã. Có ai biết lý do thực tế nào khác cho nó không?)


3
Lưu ý rằng [cả một vỏ built-in và một chương trình bên ngoài với việc sử dụng cùng một (hoặc tương đương). Trong bash, khi bạn chạy [hoặc testbạn đang gọi tích hợp.
grawity

Điều này là bắt buộc vì nếu là tùy chọn, cú pháp sẽ không rõ ràng trong một số tình huống.
Random832

20

Nó tương đương với testlệnh.

Thay vì

if /usr/bin/test -z "$VAR"
then
    echo VAR not set
fi

Bạn có thể dùng:

if /usr/bin/[ -z "$VAR" ]
then
    echo VAR not set
fi

Nó cũng có thể được sử dụng trong các vòng lặp:

i=0
while [ $i -lt 10 ]
do
   echo $i
   ((i++))
done

Bạn cũng có thể sử dụng chúng trong một lớp như thế này:

[ -z "$VAR" ] && echo VAR not set && exit

[ -f foo.txt ] && cat foo.txt

2
ví dụ tốt đẹp về cách sử dụng nó. "if / usr / bin / ["
nelaaro
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.