การทดแทนตัวแปรที่มีเครื่องหมายอัศเจรีย์ใน bash


46

ฉันมีบรรทัดต่อไปนี้ในไฟล์สคริปต์ bash .cfg ของฉัน

DDF_SOURCE="siebel_DATA_DATE_FORMAT"
DATA_DATE_FORMAT=${!DDF_SOURCE}

วิธีการคือ${!DDF_SOURCE} ประเมิน? มันคง!siebel_DATA_DATE_FORMATไม่สมเหตุสมผลสำหรับฉัน

คำตอบ:


65

นั่นคือการขยายตัวทางอ้อมเอกสารในman bashส่วนขยายการขยายพารามิเตอร์ย่อย:

หากอักขระตัวแรกของพารามิเตอร์เป็นเครื่องหมายอัศเจรีย์ (!) จะมีการแนะนำระดับการเปลี่ยนทิศทางของตัวแปร Bash ใช้ค่าของตัวแปรที่เกิดขึ้นจากพารามิเตอร์ที่เหลือเป็นชื่อของตัวแปร จากนั้นตัวแปรนี้จะถูกขยายและค่านั้นจะถูกใช้ในการทดแทนที่เหลือแทนที่จะเป็นค่าพารามิเตอร์เอง สิ่งนี้เรียกว่าการขยายตัวทางอ้อม

bash-4.2$ DDF_SOURCE="siebel_DATA_DATE_FORMAT"

bash-4.2$ siebel_DATA_DATE_FORMAT='Hello Indirect Redirection'

bash-4.2$ DATA_DATE_FORMAT=${!DDF_SOURCE} # siebel_DATA_DATE_FORMAT must get value before this line

bash-4.2$ echo $DATA_DATE_FORMAT
Hello Indirect Redirection
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.