ฉันมีบรรทัดต่อไปนี้ในไฟล์สคริปต์ bash .cfg ของฉัน
DDF_SOURCE="siebel_DATA_DATE_FORMAT"
DATA_DATE_FORMAT=${!DDF_SOURCE}
วิธีการคือ${!DDF_SOURCE
} ประเมิน? มันคง!siebel_DATA_DATE_FORMAT
ไม่สมเหตุสมผลสำหรับฉัน
ฉันมีบรรทัดต่อไปนี้ในไฟล์สคริปต์ bash .cfg ของฉัน
DDF_SOURCE="siebel_DATA_DATE_FORMAT"
DATA_DATE_FORMAT=${!DDF_SOURCE}
วิธีการคือ${!DDF_SOURCE
} ประเมิน? มันคง!siebel_DATA_DATE_FORMAT
ไม่สมเหตุสมผลสำหรับฉัน
คำตอบ:
นั่นคือการขยายตัวทางอ้อมเอกสารใน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