Bash Manual พูดว่า (manpage, การเน้นของฉัน):
เมื่อ Bash เรียกใช้คำสั่งภายนอกตัวแปร
$_จะถูกตั้งค่าเป็นชื่อพา ธ เต็มของคำสั่งและส่งไปยังคำสั่งนั้นในสภาพแวดล้อมของมัน
และ ( พารามิเตอร์พิเศษ ):
_(
$_ขีดล่าง.) ที่การเริ่มต้นเชลล์ตั้งค่าชื่อพา ธ สัมบูรณ์ที่ใช้เพื่อเรียกใช้เชลล์หรือสคริปต์เชลล์ที่จะดำเนินการตามที่ส่งผ่านในสภาพแวดล้อมหรือรายการอาร์กิวเมนต์ ต่อจากนั้นขยายไปยังอาร์กิวเมนต์สุดท้ายไปยังคำสั่งก่อนหน้าหลังจากการขยาย นอกจากนี้ยังตั้งเป็นชื่อพา ธ แบบเต็มที่ใช้เพื่อเรียกใช้คำสั่งแต่ละคำสั่งที่ดำเนินการและวางไว้ในสภาพแวดล้อมที่ส่งออกไปยังคำสั่งนั้น เมื่อตรวจสอบเมลพารามิเตอร์นี้เก็บชื่อของไฟล์เมล
ใน bash shell ฉันรัน:
$ bash $ export | grep '_='ตามคู่มือ
_ควรเป็นตัวแปรสภาพแวดล้อมของ bash shell ใหม่exportควรจะส่งออกทั้งหมดตัวแปรสภาพแวดล้อมของเปลือกทุบตีใหม่_แต่มันไม่ออก ดังนั้นฉันสงสัยว่า_ตัวแปรสภาพแวดล้อมของ bash shell ใหม่เป็นอย่างไรที่จริงแล้วใน bash shell ใด ๆ สิ่งเดียวกันจะเกิดขึ้น
$ export | grep '_='ไม่ส่งออกอะไร ดังนั้นฉันสงสัยว่า
_ตัวแปรสภาพแวดล้อมของ bash shell นั้นเคยมีหรือไม่?สำหรับการเปรียบเทียบ:
$ dash $ export | grep '_=' export _='/bin/dash'
โพสต์ของฉันคือแรงบันดาลใจจากความคิดเห็นของไมค์และตอบกลับของสเตฟาน
bash -c export | grep _=(จาก Bash) จะแสดงว่าเชลล์พาเรนต์เรียกใช้bashคำสั่งแม้ว่าจะ$_ไม่ได้ตั้งค่าในพาเรนต์
exportเป็น builtin แต่ถ้าคุณใช้printenv _มันจะแสดงให้คุณเห็นว่ามันถูกเรียกใช้อย่างไร:/usr/bin/printenvในระบบนี้