我如何回应美元符号?


67

例如,$PATH$HOME

当我键入echo $PATH它返回我的$PATH,但我想回声这个词,$PATH而不是实际变量代表什么,echo "$PATH"也不起作用。


是的使用单引号:echo '$PATH'。有关引用的更多信息,请访问
潘迪亚

@don只看到对serverfault的欺骗。我的错。
geedoubleya 2014年


@StéphaneChazelas这个问题比这个问题新近两年了。
DisplayName 2013年

@DisplayName,是的,但旨在作为“规范”问题来涵盖所有那些“如何显示特殊字符X”。(我不确定我是否喜欢那些“规范的”涵盖所有问题的答案用于关闭特定问题的想法,尽管这就是为什么我只是将其添加为评论而不是闭合投票)。
斯特凡Chazelas

Answers:


77

您只需要逃脱美元$。:

echo \$PATH
$PATH

或将其用单引号引起来:

echo '$PATH'
$PATH

这样可以确保单词不会被外壳解释。


1
谢谢,它没有echo -e在手册页上说什么。
DisplayName 2014年

-e标志用于扩展,例如,扩展\t为文字制表符。与转义美元符号以防止参数扩展无关。
chepner 2014年

2
定向到文件时,这不起作用。echo '\$PATH' >> output.txt导致“ / usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / games:/ usr / local / games:/ opt / vc / bin”被写入文件,而不是“ $ PATH”。
塞林2015年

2
非常有趣,如果您使用单引号和转义字符,则应仅回显\ $ PATH。回声命令来自哪个OS /软件包?
geedoubleya 2015年

@Cerin你@斯特凡答案的工作echo '\044*' > first.txt,会输出$ *在first.txt
MAQ

20

$大多数shell的语法中都是非常特殊的字符。如果我们只看似伯恩的贝壳,它是用来介绍:

  1. 参数扩展为$#$var${foo:-bar}
  2. 命令替换,如$(logname)${ logname;}在某些shell中也避免使用subshel​​l)
  3. 的算术扩展$((1+1))$[1+1]在某些shell中也是如此)。
  4. 在一些壳中引用的其他形式,如$'\n'$"localized string"

除最后一种情况外,这些扩展/替换仍然在双引号内$"..."bash或或内ksh93)发生

为了$避免受到特殊对待,您需要用以下任一方式引用它:

  • 单引号:echo '$PATH'echo '$'PATH。您通常要使用的那个字符会在大多数shell中转义所有字符(除了自身)。
  • 黑斜线:echo \$PATH。同样在双引号内:echo "\$PATH"
  • 在某些Shell中,还有其他一些引用运算符:echo $'$PATH'echo $'\44PATH'(假设ASCII兼容字符集),echo $'\u0024'

或确保它不是上面列出的有效扩展形式的一部分:

  • echo "$"PATH
  • echo $""PATHecho $"PATH"。应该避免使用那些,因为某些shell喜欢ksh93bash支持$"..."引号的形式。
  • echo $``PATH。除了证明它是可能的之外,您没有其他理由要使用它。
  • echo "${$+$}PATH" 和其他令人费解的...

或者您可以用$另一种方式输出:

  • 与Unix兼容echo:(echo '\044PATH'还有其他一些echo需求echo -e '\044PATH'
  • printf '\44PATH\n'
  • 猫<< \ EOF
    $ PATH
    紧急行动

请注意,这些反斜杠需要加引号,因为它们显然也是shell特有的。

希望到现在为止应该很清楚,尽管有很多方法可以执行此操作,但是没有充分的理由要在echo '$PATH'这里使用其他任何方法。


1

请注意,双引号内的文字$可能是一个问题。可以通过在双引号之外产生$来完成,如下所示:

echo "My terminal is $term, first file found in /dev is </dev/`ls /dev | head -n 1`>, the
dollar symbol is '"`echo '$'`"', and a newspaper costs "`echo '$'`"2.50."

or like this:

echo "$term is the value of "'$term'

输出:

My terminal is xterm, first file found in /dev is </dev/acpi>, the dollar symbol
is '$', and a newspaper costs $2.50.

xterm is the value of $term

echo "$term is the value of \$term"已在另一个答案中说明。或者printf '%s is the value of $term\n' "$term",无论如何,不​​应将其echo用于任意数据。
斯特凡Chazelas

-2

采用:

echo ''\$PATH'' >> output.txt 

这将起作用。


2
请在投票时添加评论
andreas-h 2016年

2
或者ec""h'''o''' ''""''\$P''A""TH''
斯特凡Chazelas

我不确定此答案正在尝试什么。答案是使用\ $或单引号。echo'$ PATH'将显示$ PATH echo'\ $ PATH'将显示\ $ PATH echo“ \ $ PATH”将显示$ PATH echo``\ $ PATH''从技术上讲是正确的,但是两个空字符串没有任何目的。
bobpaul
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.