基本スクリプトからスクリプトを生成する際に問題があります。
とても簡単です:
cat pippo << EOF
LOGFILE=test.log
echo '#############################' >> $LOGFILE
EOF
。しかし、pippoをチェックすると、次のような結果が表示されます。
LOGFILE=test.log
echo '#############################' >>
EOF
$LOGFILEが置き換えられたのはなぜですか?
ベストアンサー1
デフォルトでは、ここにあるドキュメントはシェル拡張、正確な引数拡張、コマンド置換、算術拡張の影響を受けます。したがって、あなたの場合、変数(引数)拡張が発生します。変数はLOGFILE
現在シェルで拡張されており、変数が存在しない可能性があるため、nullは拡張値として返されます(および置き換えられます)。
ここで説明されているように、文字通りシェルメタ文字を取得するには、終端文字列の周囲に引用符を使用します。
cat pippo <<'EOF' ## "EOF" would do too
LOGFILE=test.log
echo '#############################' >>"$LOGFILE"
EOF
また、変数拡張を引用してください。 (おそらく)ファイル名を参照しているため、拡張後はトークン化されず、パス名は拡張されません。