O Bash aparentemente tem suporte à matriz de assosiative, mas eu não recomendo usá-lo porque não há uma maneira fácil de passá-lo para uma função como argumento. Em vez disso, esse script define os pares de chave / valor intercalados em uma matriz simples e os passa para format()
como parâmetros ordinais.
#!/bin/bash
format() (
T="$1"
shift
while test $# -ge 2; do
eval "$1"'=$(echo "$2")'
shift 2
done
eval "cat <<END_OF_TEMPLATE
$T
END_OF_TEMPLATE"
)
read -r -d '' templateStr <<'EOF'
<style type='text/css'>
${cssContent}
</style><!---${cssFileName}--->
EOF
assocArr=(
cssFileName "abc.css"
cssContent $'.abc {\n display: none;\n}\n'
)
format "$templateStr" "${assocArr[@]}"
Saída:
$ bash format.sh
<style type='text/css'>
.abc {
display: none;
}
</style><!---abc.css--->
Observe que $templateStr
não pode conter a linha END_OF_TEMPLATE
.