Đó là (bash) shell tham số đặc biệt?


10

Tôi đã tìm thấy một số tham số đặc biệt với bash bắt đầu bằng $dấu hiệu. Ví dụ: Khi tôi đang đi lang thang cho trạng thái thoát mà tôi biết $?, hãy xử lý ID bằng cách, $$ v.v.

Vì vậy, tôi đang chia sẻ bài đăng này để biết các tham số bash (shell) đặc biệt và cách sử dụng của chúng.

Câu trả lời:


17

Tham khảo 3.4.2 Các thông số đặc biệt từ Sổ tay tham khảo Bash.

Thông số đặc biệt:

  • $ *

    ($ *) Mở rộng đến các tham số vị trí, bắt đầu từ một. Khi mở rộng không nằm trong dấu ngoặc kép, mỗi tham số vị trí sẽ mở rộng thành một từ riêng biệt. Trong bối cảnh nơi nó được thực hiện, những từ đó có thể được chia nhỏ hơn nữa và mở rộng tên đường dẫn. Khi mở rộng xảy ra trong dấu ngoặc kép, nó mở rộng thành một từ duy nhất với giá trị của từng tham số được phân tách bằng ký tự đầu tiên của biến đặc biệt IFS. Nghĩa là, "$ *" tương đương với "$ 1c $ 2c", trong đó c là ký tự đầu tiên của giá trị của biến IFS. Nếu IFS không được đặt, các tham số được phân tách bằng dấu cách. Nếu IFS là null, các tham số được nối mà không có dấu phân cách.

  • $ @

    ($ @) Mở rộng đến các tham số vị trí, bắt đầu từ một. Khi mở rộng xảy ra trong dấu ngoặc kép, mỗi tham số sẽ mở rộng thành một từ riêng biệt. Đó là, "$ @" tương đương với "$ 1" "$ 2". Nếu việc mở rộng trích dẫn kép xảy ra trong một từ, thì việc mở rộng tham số đầu tiên được nối với phần đầu của từ gốc và việc mở rộng tham số cuối cùng được nối với phần cuối của từ gốc. Khi không có tham số vị trí, "$ @" và $ @ mở rộng thành không có gì (nghĩa là chúng bị xóa).

  • $ #

    ($ #) Mở rộng đến số lượng tham số vị trí theo số thập phân.

  • $?

    ($?) Mở rộng đến trạng thái thoát của đường ống tiền cảnh được thực hiện gần đây nhất.

  • $ -

    ($ -, một dấu gạch nối.) Mở rộng sang các cờ tùy chọn hiện tại như được chỉ định khi gọi, bằng lệnh dựng sẵn hoặc các lệnh được đặt bởi chính trình bao (chẳng hạn như tùy chọn -i).

  • $$

    ($$) Mở rộng tới ID tiến trình của trình bao. Trong một lớp con (), nó mở rộng tới ID tiến trình của lớp vỏ gọi, không phải lớp vỏ con.

  • $!

    ($!) Mở rộng tới ID tiến trình của công việc được đặt gần đây nhất vào nền, cho dù được thực thi dưới dạng lệnh không đồng bộ hoặc sử dụng nội dung bg (xem Nội dung điều khiển công việc ).

  • $ 0

    ($ 0) Mở rộng thành tên của tập lệnh shell hoặc shell. Điều này được đặt ở khởi tạo shell. Nếu Bash được gọi với một tệp lệnh (xem Shell Sc Script ), $ 0 được đặt thành tên của tệp đó. Nếu Bash được bắt đầu với tùy chọn -c (xem Gọi Bash ), thì $ 0 được đặt thành đối số đầu tiên sau chuỗi được thực thi, nếu có. Mặt khác, nó được đặt thành tên tệp được sử dụng để gọi Bash, như được đưa ra bởi đối số zero.

  • $ _

    ($ _, một dấu gạch dưới.) Khi khởi động shell, được đặt thành tên đường dẫn tuyệt đối được sử dụng để gọi tập lệnh shell hoặc shell đang được thực thi như được truyền trong môi trường hoặc danh sách đối số. Sau đó, mở rộng đến đối số cuối cùng cho lệnh trước đó, sau khi mở rộng. Cũng được đặt thành tên đường dẫn đầy đủ được sử dụng để gọi từng lệnh được thực thi và được đặt trong môi trường được xuất sang lệnh đó. Khi kiểm tra thư, tham số này giữ tên của tệp thư.


Điều này cũng có thể được in từ trang man của bash:

$ man bash | awk '/Special Parameters$/','/Shell Variables$/'

Hy vọng điều này sẽ giúp mọi người (bao gồm cả người dùng mới) có được thông tin / kiến ​​thức về Thông số đặc biệt trong (bash) shell


Lưu ý: Bài đăng này yêu cầu chỉnh sửa định dạng
Pandya

@jlliagre nhờ thực hiện các điều chỉnh.
Pandya

Bạn được chào đón, điều đó thật kỳ quặc bởi vì phần xem trước không khớp với kết xuất cuối cùng.
jlliagre

2

theo hướng dẫn của Bash-scripting .

ID tiến trình (PID) của chính tập lệnh . Biến $$ thường được sử dụng trong các tập lệnh để xây dựng tên tệp tạm thời "duy nhất". nếu bạn chạy echo $$trong một tập lệnh, bạn sẽ thấy đầu ra khác với PID của shell hiện tại.

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.