ไม่มีเครื่องมือที่จำเป็นอื่น ๆ /bin/sh
กว่า รับไฟล์เทมเพลตของแบบฟอร์ม
Version: ${version}
Path: ${path}
หรือรวมกับรหัสเชลล์ผสมรวมอยู่ด้วย
Version: ${version}
Path: ${path}
Cost: ${cost}\$
$(i=1; for w in one two three four; do echo Param${i}: ${w}; i=$(expr $i + 1); done)
และไฟล์การกำหนดค่าแยกวิเคราะห์เชลล์เช่น
version="1.2.3-r42"
path="/some/place/under/the/rainbow/where/files/dance/in/happiness"
cost="42"
มันเป็นเรื่องง่ายที่จะขยายไปสู่
Version: 1.2.3-r42
Path: /some/place/under/the/rainbow/where/files/dance/in/happiness
Cost: 42$
Param1: one
Param2: two
Param3: three
Param4: four
แน่นอนให้เส้นทางไปยังไฟล์การกำหนดค่าในตัวแปรเปลือกconfig_file
และเส้นทางไปยังไฟล์แม่แบบในtemplate_file
สิ่งที่คุณต้องทำคือ:
. ${config_file}
template="$(cat ${template_file})"
eval "echo \"${template}\""
นี่อาจจะดีกว่าการมีเชลล์สคริปต์ที่สมบูรณ์เป็นไฟล์เทมเพลต (โซลูชันของ @ mtinberg)
โปรแกรมขยายเทมเพลตไร้เดียงสาที่สมบูรณ์:
#!/bin/sh
PROG=$(basename $0)
usage()
{
echo "${PROG} <template-file> [ <config-file> ]"
}
expand()
{
local template="$(cat $1)"
eval "echo \"${template}\""
}
case $# in
1) expand "$1";;
2) . "$2"; expand "$1";;
*) usage; exit 0;;
esac
สิ่งนี้จะเอาท์พุทการขยายตัวไปยังเอาท์พุทมาตรฐาน; เพียงแค่เปลี่ยนเส้นทางเอาต์พุตมาตรฐานไปยังไฟล์หรือแก้ไขข้างต้นอย่างชัดเจนเพื่อสร้างไฟล์เอาต์พุตที่ต้องการ
Caveats:การขยายไฟล์เทมเพลตจะไม่ทำงานหากไฟล์มีเครื่องหมายคำพูดคู่ที่ไม่ใช้ค่า Escape ( "
) เพื่อเหตุผลด้านความปลอดภัยเราอาจรวมถึงการตรวจสอบสติที่ชัดเจนหรือดีกว่าดำเนินการเปลี่ยนแปลงการหลบหนีของเชลล์หากไฟล์เทมเพลตถูกสร้างโดยนิติบุคคลภายนอก