Bash Manual nói (manpage, nhấn mạnh của tôi):
Khi Bash gọi một lệnh bên ngoài, biến
$_
được đặt thành tên đường dẫn đầy đủ của lệnh và được truyền cho lệnh đó trong môi trường của nó.
Và ( Thông số đặc biệt ):
_
(
$_
, 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ư.
Trong một bash shell, tôi chạy:
$ bash $ export | grep '_='
Theo hướng dẫn,
_
nên là một biến môi trường của vỏ bash mới.export
được cho là xuất tất cả các biến môi trường của shell bash mới, nhưng nó không xuất ra_
. Vì vậy, tôi tự hỏi liệu_
một biến môi trường của vỏ bash mới?Trên thực tế trong bất kỳ bash shell, điều tương tự xảy ra
$ export | grep '_='
không đầu ra bất cứ điều gì. Vì vậy, tôi tự hỏi nếu
_
bao giờ là một biến môi trường của một vỏ bash?Để so sánh:
$ dash $ export | grep '_=' export _='/bin/dash'
Bài viết của tôi được lấy cảm hứng từ bình luận của Mike và trả lời của Stephane .
bash -c export | grep _=
(từ Bash), sẽ hiển thị cách shell cha gọi bash
lệnh, mặc dù $_
không được đặt trong cha.
export
là một nội trang, nhưng nếu bạn sử dụngprintenv _
, nó sẽ cho bạn thấy nó đã được gọi như thế nào:/usr/bin/printenv
trên hệ thống này.