bashスクリプトを使用した新しいスクリプトの出力:置き換える必要がある変数と置換しないでください。

bashスクリプトを使用した新しいスクリプトの出力:置き換える必要がある変数と置換しないでください。

bash変数の置換に問題があります。ここで私がやろうとしていることの愚かな例があります。 Bashスクリプトから新しいスクリプトを出力する必要があります。 1行(echo例を参照)には、置き換えてはいけない変数と置き換える必要がある変数が混在しています。

#!/bin/bash
REPLACE=`whoami`
cat << EOF > mynewscript.sh
    read DONTREPLACE < /home/$REPLACE/localinput.txt
    echo $DONTREPLACE > /home/$REPLACE/somefile.log
EOF
exit 0

これは実際の例ではありませんが、ポイントを説明します。絶対パスを事前に知っておく必要があり、$ REPLACEが元のスクリプトで評価されることを望んでいるとします。しかし、私のスクリプトで$ DONTREPLACEを評価/交換したくありません。$DONTREPLACE新しいスクリプトの出力はまったく同じでなければなりません。

したがって、この文書を文書化するときに「EOF」を引用することは機能しません。

私はこれをよく説明してほしい。

他の解決策はわかりません。どんなアイデアにも感謝しますが、非常に簡単なアイデア/ソリューションを好みます。エレガントにする必要はありません。

ベストアンサー1

を使用して前の内容を\エスケープする必要があります。以下の例と出力を参照してください。$DONOTREPLACE

REPLACE=10
DONOTREPLACE=20
cat <<EOF
> echo $REPLACE
> echo \$DONOTREPLACE
> EOF

echo 10
echo $DONOTREPLACE

おすすめ記事