${!FOO}ทำการทดแทนสองครั้งในbashความหมายมันใช้ค่า (สตริง) ของ FOO และใช้มันเป็นชื่อตัวแปร
zshไม่รองรับคุณสมบัตินี้
มีวิธีที่จะทำให้งานนี้ในเดียวกันbashและzsh?
พื้นหลัง:
ฉันมีรายการตัวแปรสภาพแวดล้อมเช่น
PATH MAIL EDITOR
และต้องการพิมพ์ชื่อตัวแปรก่อนหลังจากนั้นค่าของมัน
ใช้งานbashได้ แต่ไม่ใช่zsh:
for VAR in LIST
do
echo $VAR
echo ${!VAR}
done
ควรเป็นไปได้ด้วย "วิธีเก่า" ด้วยevalแต่ฉันไม่สามารถทำงาน:
for VAR in LIST
do
echo $VAR
echo `eval \$$VAR`
done
ฉันไม่เคยจะเข้าใจว่าทำไมฉันถึงไม่สามารถทำการทดแทนอย่างลึกซึ้งโดยพลการอย่างเช่น${${VAR}}หรือแม้ว่า${${${VAR}}}จำเป็นต้องมีดังนั้นคำอธิบายสำหรับสิ่งนั้นก็จะดีเช่นกัน
bashมันมีฟังก์ชั่นเดียวกัน (และอีกมาก) ใช้รูปแบบที่แตกต่างกัน${(p)FOO}เท่านั้น
(e)สถานะการขยายพารามิเตอร์ของ zsh ถูกเพิ่มใน zsh-2.6-beta17 (พฤษภาคม 1996), (P)ตั้งค่าสถานะใน 3.1.5-pws-7 (1999) bash's ${!var}ใน 2.0 (ธันวาคม 1996)