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
答え2
私の考えにbashを使用する場合、より良い解決策は「EOF」マーカーをエスケープすることです。このように:
cat > mytest << \EOF
$HOME
EOF
cat mytest
$HOME