이것은 내 스크립트입니다.
var="lalallalal"
tee file.tex <<'EOF'
text \\ text \\
$var
EOF
"EOF"(따옴표 포함)를 사용해야 합니다. 그렇지 않으면 이중 슬래시( )를 사용할 수 없기 때문입니다 //
.
그러나 따옴표를 사용하면 $var
변수가 확장되지 않습니다.
답변1
발견한 대로 EOF
변수를 인용하면 변수가 확장되지 않습니다. 이에 대한 내용은 다음 문서 섹션에 설명되어 있습니다 man bash
.
No parameter and variable expansion, command substitution, arithmetic
expansion, or pathname expansion is performed on word. If any part of
word is quoted, the delimiter is the result of quote removal on word,
and the lines in the here-document are not expanded. If word is
unquoted, all lines of the here-document are subjected to parameter
expansion, command substitution, and arithmetic expansion, the charac‐
ter sequence \<newline> is ignored, and \ must be used to quote the
characters \, $, and `.
거기에 설명된 또 다른 점은 을 계속 사용할 수 있다는 것입니다. \
단지 이스케이프하면 됩니다: \\
. 따라서 둘 다 원하므로 \
각각을 이스케이프 처리해야 합니다 \\\\
. 이 모든 것을 종합하면 다음과 같습니다.
#!/bin/bash
var="lalallalal"
tee file.tex <<EOF
text \\\\ text \\\\
$var
EOF
답변2
$
문서의 일부 또는 특정 특수 문자( 예, 아니요) 에 대해서만 확장을 활성화하려는 것 같습니다 \
. 첫 번째 경우에는 이 문서를 두 부분으로 나누고 싶을 수도 있고, 두 번째 경우에는 비표준 접근 방식을 제안하겠습니다. 이를 \
변수로 처리합니다.
var="lalallalal"
bs='\'; #backslash
tee file.tex <<EOF
text $bs$bs text $bs$bs
$var
EOF
답변3
한 가지 옵션은 문자열을 생성한 후 간단히 변수를 바꾸는 것입니다. 나는 이것이 수동 변수 확장이라는 것을 알고 있지만 해결책입니다.
# Set variables
var="lalallalal"
read -rd '' tex_data <<'EOF'
text \\ text \\
${var}
EOF
# Expand variable
tex_data="${tex_data//\$\{var\}/$var}"
printf "%s" "$tex_data" | tee file.tex