Tidak ada alat yang diperlukan selain /bin/sh
. Diberikan file templat dari formulir
Version: ${version}
Path: ${path}
atau bahkan dengan kode shell campuran disertakan
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)
dan file konfigurasi seperti shell
version="1.2.3-r42"
path="/some/place/under/the/rainbow/where/files/dance/in/happiness"
cost="42"
itu adalah masalah sederhana untuk memperluas ini
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
Memang, mengingat path ke file konfigurasi di variabel shell config_file
dan path ke file template template_file
, semua yang perlu Anda lakukan adalah:
. ${config_file}
template="$(cat ${template_file})"
eval "echo \"${template}\""
Ini mungkin lebih cantik daripada memiliki skrip shell lengkap sebagai file templat (solusi @ mtinberg).
Program expander template naif lengkap:
#!/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
Ini akan menghasilkan ekspansi ke output standar; hanya mengarahkan keluaran standar ke file atau memodifikasi di atas dengan cara yang jelas untuk menghasilkan file keluaran yang diinginkan.
Peringatan: Perluasan file template tidak akan berfungsi jika file berisi tanda kutip ganda yang tidak terhapus ( "
). Untuk alasan keamanan, kami mungkin harus menyertakan beberapa pemeriksaan kewarasan yang jelas atau, lebih baik lagi, melakukan transformasi shell escape jika file templat dihasilkan oleh entitas eksternal.