function translate_var_refs(str, _out, _name) { _out = "" while (match(str, /%\[[a-zA-Z0-9_]+\]/)) { _out = _out substr(str, 1, RSTART-1) _name = substr(str, RSTART+2, RLENGTH-3) _out = _out sprintf("${DATA_%s-%[%s]}", _name, _name) str = substr(str, RSTART + RLENGTH) } _out = _out str return _out } function escape_shell(str) { gsub(/\\/, "\\\\", str) gsub(/'/, "\\'", str) gsub(/"/, "\\\"", str) gsub(/\$/, "\\$", str) return str } BEGIN { begin=0 } { if (!begin) { printf "export FILENAME='%s'\n", FILENAME printf ". preproc/lib.sh\n" begin=1 } } /^%~/ { print substr($0, 3) } /^%[a-zA-Z0-9_]+:/ { _split = index($0, ":") _name = substr($0, 2, _split-2) _value = substr($0, _split+1) printf "export DATA_%s='%s'\n", _name, escape_shell(_value) } !/^%%|^%~|^%[a-zA-Z0-9_]+:/ { printf "printf '%%s\\n' \"%s\"\n", translate_var_refs(escape_shell($0)) }