ここのドキュメントを使用して、Bashスクリプトからスクリプトを生成します。私の変数が置き換えられるのはなぜですか?

ここのドキュメントを使用して、Bashスクリプトからスクリプトを生成します。私の変数が置き換えられるのはなぜですか?

基本スクリプトからスクリプトを生成する際に問題があります。

とても簡単です:

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

また、変数拡張を引用してください。 (おそらく)ファイル名を参照しているため、拡張後はトークン化されず、パス名は拡張されません。

おすすめ記事