ในวิธีที่เข้ากันได้กับ 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 ระบุเพื่อสร้างเอาต์พุตที่เหมาะสำหรับอินพุตในเชลล์