export -p
วิธีแบบพกพามากที่สุดคือ
export -p
รายการตัวแปรส่งออก นี่คือมักจะชอบdeclare -x
, ถ้าdeclare
เปลือกของคุณมี
เปลือกหอยบอร์นสไตล์ที่ใช้ในปัจจุบันควรจะสนับสนุนexport -p
ขณะที่มันถูกต้องตาม POSIX :
เมื่อระบุ-p การส่งออกจะเขียนชื่อและค่าของตัวแปรที่เอ็กซ์พอร์ตทั้งหมดไปยังเอาต์พุตมาตรฐานในรูปแบบต่อไปนี้:
"export %s=%s\n", <name>, <value>
หากชื่อถูกตั้งค่าและ:
"export %s\n", <name>
ถ้าไม่มีการตั้งชื่อ
มาตรฐานอธิบายต่อไปว่าค่าของตัวแปรจะแสดงในลักษณะที่มักจะอนุญาตให้ใช้ในภายหลังทางด้านขวามือของ=
ในการกำหนด นี่คือการพูดว่ามันอาจจะยกมา กระสุนที่แตกต่างกันอาจแสดงพวกมันแตกต่างกัน แต่มีผลเหมือนกัน export -p
ทำงานได้แม้อยู่ในเปลือกหอยที่ไม่มีdeclare
ในตัวเช่นDash
$ dash -c 'export -p | grep HOME=' # busybox sh and other ash give the same output.
export HOME='/home/ek'
$ posh -c 'export -p | grep HOME=' # ksh93, mksh, lksh, and others give the same output.
export HOME=/home/ek
ฉันได้บีบเอาท์พุทให้grep
เป็นปึกแผ่น แต่ถ้าคุณไม่ได้กรองมันคุณก็จะได้รับรายการตัวแปรที่ส่งออกทั้งหมดของคุณ จากคำถามของคุณดูเหมือนว่าเป็นสิ่งที่คุณอาจพบว่ามีประโยชน์มากที่สุด
เชลล์บางตัวเช่น Bash ใช้รูปแบบที่ไม่ได้มาตรฐานเว้นแต่จะได้รับคำแนะนำอย่างชัดเจนให้ทำงานในลักษณะที่สอดคล้องกับ POSIX ใน Bash export -p
จะให้ผลลัพธ์เช่นเดียวกับdeclare -x
ค่าเริ่มต้น
$ bash -c 'export -p | grep HOME='
declare -x HOME="/home/ek"
$ bash -c 'POSIXLY_CORRECT= export -p | grep HOME='
export HOME="/home/ek"
$ bash -c 'set -o posix; export -p | grep HOME='
export HOME="/home/ek"
$ bash --posix -c 'export -p | grep HOME='
export HOME="/home/ek"
$ ln -s /bin/bash sh
$ ./sh -c 'export -p | grep HOME=' # Invoking bash as sh also puts it in POSIX mode.
export HOME="/home/ek"
Zsh แสดงรูปแบบที่ไม่เป็นมาตรฐานแม้เมื่อเปิดใช้งานความเข้ากันได้ POSIX:
$ zsh -c 'export -p | grep HOME='
typeset -x HOME=/home/ek
$ zsh -c 'emulate -R sh; export -p | grep HOME='
typeset -x HOME=/home/ek
$ ln -s /bin/zsh sh
$ ./sh -c 'export -p | grep HOME='
typeset -x HOME=/home/ek
ในกรณีใด ๆ คุณสามารถแยกการแสดงแบบพกพา (ซึ่งอาจจะยกมา) =
โดยการค้นหาคำที่ตามมาด้วย สิ่งนี้ไม่ได้ขึ้นอยู่กับคำก่อนหน้าบนบรรทัดตราบใดที่คำเหล่านั้นไม่นำหน้าทันที=
ซึ่งไม่ควรนำมาใช้ ตัวอย่างเช่น:
% export -p | grep -oE '\w+=.*'
HOME=/home/ek
LANG=en_US.UTF-8
LESSCLOSE='/usr/bin/lesspipe %s %s'
....
โปรดทราบว่าไม่=
รายการทั้งหมดจำเป็นต้องมี นี่เป็นเพราะตัวแปรสามารถยกเลิกการตั้งค่า แต่ส่งออก รายการเหล่านั้นจะถูกกรองออกโดยgrep
คำสั่งด้านบนซึ่งอาจหรืออาจไม่ใช่สิ่งที่คุณต้องการ
เวลาส่วนใหญ่ของคุณเพียงแค่ต้องการที่จะตรวจสอบการส่งออกและดังนั้นคุณจะไม่สนใจว่ารายการจะนำหน้าด้วยexport
, declare -x
, typeset -x
หรือสิ่งอื่น export -p
จากนั้นเรียกเพียง
ฉันทดสอบคำสั่งเหล่านั้นบน Ubuntu 16.04 LTS ด้วยแต่ละเวอร์ชันที่บรรจุอย่างเป็นทางการของแต่ละเชลล์