Ký hiệu đô la theo sau dấu ngoặc vuông $ [[]] có nghĩa là gì trong bash?


34

Có vẻ như $[expr]thực hiện mở rộng số học giống như $((expr)). Nhưng tôi không thể tìm thấy bất kỳ đề cập nào $[trong hướng dẫn sử dụng bash. Lệnh này không cho kết quả:

gunzip -c /usr/share/man/man1/bash.1.gz | grep -E '\$\['

Toán tử này là gì và hành vi của nó được chuẩn hóa ở bất cứ đâu?

Phiên bản bash của tôi: GNU bash, phiên bản 3.2.51 (1) -release (x86_64-apple-darwin13)


3
Để trả lời rõ ràng câu hỏi của bạn về một tiêu chuẩn : Cú pháp bashcụ thể (lỗi thời) $[...]là không chuẩn. $((...))( Xuất phát từ ksh) là tiêu chuẩn POSIX.
Janis

2
Với Ubuntu 11.04 : man bash | grep -E '\$\['. Đầu ra: Định dạng cũ $ [biểu thức] không được dùng nữa và sẽ bị xóa trong các phiên bản sắp tới
Cyrus

các trang man có thể chứa những thứ như _t_h_i_s (sau đó được tiện ích man giải thích để xuất hiện khác đi) để grep của bạn có thể thất bại nếu điều đó xảy ra là điều bạn tìm kiếm được ghi nhận như thế này
Olivier Dulac

Câu trả lời:


19

Bạn có thể tìm thấy nguồn bash cũ ở đây . Cụ thể tôi đã tải bash-1.14.7.tar.gz . Trong documentation/bash.txtbạn sẽ tìm thấy:

Mở rộng số học

Mở rộng số học cho phép đánh giá biểu thức số học và thay thế kết quả. Có hai định dạng để mở rộng số học:

     $[expression]

     $((expression))

Các tham chiếu $[được doc/bash.htmllấy từ bản tải xuống bash-doc-2.0.tar.gzNEWStệp đề cập rằng:

Các $[...]cú pháp mở rộng số học không còn được hỗ trợ, ủng hộ $((...)).

$((...))cũng là cú pháp tiêu chuẩn cho việc mở rộng số học, nhưng có thể đã được thêm vào tiêu chuẩn muộn hơn so với triển khai Bash ban đầu.

Tuy nhiên, $[...]dường như vẫn hoạt động trong Bash 5.0, vì vậy nó không bị xóa hoàn toàn.


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.