ในวิธีที่เข้ากันได้กับ posix ที่ทำงานกับการใช้งานหลายอย่างฉันจะพิมพ์รายการตัวแปรสภาพแวดล้อมที่กำหนดไว้ในปัจจุบันโดยไม่มีค่าได้อย่างไร
ในการใช้งานบางอย่าง (mksh, freebsd / bin / sh) เพียงแค่ใช้exportด้วยตัวเองจะพอดีกับการเรียกเก็บเงิน:
$ export
FOO2
FOO
แต่สำหรับการปรับใช้อื่น ๆ (bash, zsh, dash) exportก็แสดงค่าเช่นกัน ด้วย bash ตัวอย่างเช่น:
$ export
export FOO2='as df\
asdk=fja:\
asd=fa\
asdf'
export FOO='sjfkasjfd kjasdf:\
asdkj=fkajdsf:\
:askjfkajsf=asdfkj:\
safdkj'
$ printenv | sed -n l
FOO2=as\tdf\$
asdk=fja:\$
asd=fa\$
asdf$
FOO=sjfkasjfd kjasdf:\$
asdkj=fkajdsf:\$
\t:askjfkajsf=asdfkj:\$
safdkj$
ตัวเลือกอื่น ๆ เช่นenvหรือprintenvไม่มีตัวเลือกในการพิมพ์เพียงชื่อตัวแปรโดยไม่มีค่าอย่างน้อยก็ไม่ได้อยู่บนแพลตฟอร์ม linux และ freebsd ที่ฉันได้ลอง
ท่อไปที่ awk / sed / etc หรือตัดรายการด้วยเทคนิคการขยายพารามิเตอร์ (เช่น, ${foo%%=*}) เป็นที่ยอมรับ แต่ต้องทำงานกับค่าที่อาจขยายบรรทัดและมี=และช่องว่างในค่า (ดูตัวอย่างด้านบน)
คำตอบเฉพาะสำหรับการใช้งานเชลล์โดยเฉพาะนั้นน่าสนใจ แต่ในเบื้องต้นฉันกำลังมองหาบางอย่างที่เข้ากันได้กับการใช้งาน
export -pสำหรับสิ่งนี้?
export -pเพราะนั่นจะให้ผลลัพธ์ที่สอดคล้องกับเชลล์ POSIX ทั้งหมดซึ่งคุณบอกว่าคุณต้องการ
export -pไม่ตรงกับข้อกำหนดแรก - การพิมพ์เพียงชื่อตัวแปรโดยไม่มีค่า
export -pคุณกำลังจะไปสิ่งที่แยกไปกับการส่งออกของ ฉันจะไม่เขียนการแยกวิเคราะห์นั้นเพราะในกรณีทั่วไปจะต้องทำการแยกวิเคราะห์คำพูดที่เหมาะสมในกรณีที่คุณมีตัวแปรที่มีค่าเป็นเช่นhello\nexport var=valueนั้น หนึ่งในไม่กี่คำสั่งอื่น ๆ ที่จะให้ผลผลิตที่สอดคล้องกันในทุกเปลือก POSIX เป็นenvแต่ผลลัพธ์ที่ยากที่จะแยกเพราะมันขาดexport =บิต
export -pที่ POSIX ระบุเพื่อสร้างเอาต์พุตที่เหมาะสำหรับอินพุตในเชลล์