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
ในระบบนี้