bashで変数をHEREDOCに渡す方法は?


16

私はこのようなことをしたい:

$ NAME=John
$ cat << '==end' > test
My name is $NAME
==end

$ cat test
My name is John

何か案は?

回答:


24
cat <<EOF > test
My name is $NAME
EOF

あるいは

cat <<==end > test
My name is $NAME
==end

私のために働いた。

あなたが取るときのように見える==end'変数が代用されません。

ああ、ここではmanページにあります(3.6.6を見てください):

ヒアドキュメントの形式は次のとおりです。

      <<[-]word
              here-document
      delimiter

wordに対してパラメーター展開、コマンド置換、算術展開、またはパス名展開は実行されません。word内の文字が引用されている場合、 区切り文字はwordの引用削除の結果であり、ヒアドキュメントの行は展開されません。wordが引用符で囲まれていない場合、ヒアドキュメントのすべての行は、パラメーター展開、コマンド置換、および算術展開の対象となります。[...]


ダブルクォート(cat << "==end" > test)を使用することもできますが、ハードクォートは実際に置換を防ぎます。
マット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.