Escaping a dollar sign in Unix inside the cat command

有些话、适合烂在心里 提交于 2020-01-09 09:47:27

问题


On Ubuntu, I would like to end up with a disk file that reads:

foo $(bar)

I would like to create this file using the cat command, e.g.

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

The problem is the dollar sign. I have tried multiple combinations of backslash, single-quote, and double-quote characters, and cannot get it to work.


回答1:


You can use regular quoting operators in a here document:

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

or you can disable expansion in the entire here document by quoting or escaping the here-doc delimiter:

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

It doesn't matter whether you use single or double quotes or a backslash escape (<<\HERE); they all have the same effect.




回答2:


Backslash ('\') works for me. I tried it and here is the output:

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

$ cat tmp.txt 
foo $(abc)

I tried it on bash. I'm not sure whether you have to use a different escape character in a different shell.



来源:https://stackoverflow.com/questions/21984960/escaping-a-dollar-sign-in-unix-inside-the-cat-command

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!