Bash에서 문자열 형식을 지정하기 위한 Jquery와 유사한 템플릿

Bash에서 문자열 형식을 지정하기 위한 Jquery와 유사한 템플릿
#!/bin/bash
rm all
for f in assets/css/*.css;
do
  printf "<style type='text/css' >\n" >> all
  cat $f >> all
  printf "</style>\n <!-----$f---->" >> all
  echo "$f copied"
done

이 코드를 사용하여 파일 이름이 있는 모든 CSS 콘텐츠를 html 파일로 복사합니다. 이 코드는 잘 작동합니다.

그러나 문자열이 연결되는 방식은 템플릿과 논리를 혼동합니다.

다음과 같은 템플릿 문자열을 사용하여 더 우아하게 작성할 수 있습니까?

<style type='text/css'>
${cssContent}
</style><!---${cssFileName}--->

그리고 연관 배열(예:

{
  'cssContent' : 'file content',
  'cssFileName' : 'file name'
}

그리고 함수,

format(templateStr, assocArr)

서식이 지정된 문자열을 반환하시겠습니까?

답변1

Bash는 분명히 연관 배열을 지원하지만 이를 함수에 인수로 전달하는 쉬운 방법이 없기 때문에 사용을 권장하지 않습니다. 대신 이 스크립트는 간단한 배열에 인터리브된 키/값 쌍을 정의하고 format()이를 서수 인수로 전달합니다.

#!/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[@]}"

산출:

$ bash format.sh 
<style type='text/css'>
.abc {
  display: none;
}
</style><!---abc.css--->

행 은 $templateStr포함될 수 없습니다 END_OF_TEMPLATE.

관련 정보