これは私のスクリプトです。
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
$
文書の一部または特定の特殊文字(はい、いいえ)に対してのみ拡張を有効にしたいようです\
。最初のケースではこの文書を2つの部分に分けたい場合があり、2番目のケースでは非標準的なアプローチを提案します。これを\
変数として扱います。
var="lalallalal"
bs='\'; #backslash
tee file.tex <<EOF
text $bs$bs text $bs$bs
$var
EOF
答え3
1つのオプションは、文字列を生成してから単に変数を置き換えることです。私はこれが手動変数拡張であることを知っていますが、解決策です。
# 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