web-dev-qa-db-ja.com

catコマンド内でUnixのドル記号をエスケープする

Ubuntuでは、次のようなディスクファイルを作成したいと思います。

foo $(bar)

catコマンドを使用してこのファイルを作成したいと思います。例:.

cat <<EOF > baz.txt
type_magic_incantation_here_that_will_produce_foo_$(bar)
EOF

問題はドル記号です。バックスラッシュ、一重引用符、および二重引用符の文字を複数組み合わせてみましたが、機能しません。

19
Iron Pillow

ヒアドキュメントでは、通常の引用演算子を使用できます。

$ cat <<HERE
> foo \$(bar)
> HERE
foo $(bar)

または、ヒアドキュメント区切り文字を引用またはエスケープすることで、ヒアドキュメント全体の展開を無効にすることができます。

$ cat <<'HERE'  # note single quotes
> foo $(bar)
> HERE
foo $(bar)

一重引用符または二重引用符を使用するか、円記号エスケープ(<<\HERE);それらはすべて同じ効果があります。

27
tripleee

バックスラッシュ( '\')は私のために働きます。私はそれを試しました、そしてここに出力があります:

$ cat <<EOF > tmp.txt
foo \$(abc)
EOF

$ cat tmp.txt 
foo $(abc)

Bashで試してみました。別のシェルで別のエスケープ文字を使用する必要があるかどうかはわかりません。

2
Vinay