【问题标题】:Escaping a dollar sign in Unix inside the cat command在 cat 命令中转义 Unix 中的美元符号
【发布时间】:2014-03-25 22:48:24
【问题描述】:

在 Ubuntu 上,我希望得到一个磁盘文件,内容如下:

foo $(bar)

我想使用cat 命令创建这个文件,例如

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

问题在于美元符号。我尝试了多种反斜杠、单引号和双引号字符的组合,但无法正常工作。

【问题讨论】:

标签: bash shell unix escaping sh


【解决方案1】:

反斜杠 ('\') 对我有用。我试过了,这是输出:

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

$ cat tmp.txt 
foo $(abc)

我在 bash 上试过了。我不确定您是否必须在不同的 shell 中使用不同的转义字符。

【讨论】:

    【解决方案2】:

    您可以在此处的文档中使用常规引用运算符:

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

    或者您可以通过引用或转义 here-doc 分隔符来禁用整个 here 文档中的扩展:

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

    使用单引号或双引号或反斜杠转义都没关系(&lt;&lt;\HERE);它们都具有相同的效果。

    【讨论】:

    • 这也很有帮助。我不知道这些被称为“这里的文件”。
    • 这是更好的答案。我终于发现我的问题出现了,因为我有需要防止的 嵌套 转义。这是更清洁的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 2015-06-17
    • 2021-07-01
    • 1970-01-01
    • 2022-11-22
    • 2017-03-14
    • 2012-07-16
    相关资源
    最近更新 更多