我如何回应美元符号?

我如何回应美元符号?

例如,$PATH$HOME

当我输入时,echo $PATH它返回 my $PATH,但我想回显该单词$PATH,而不是实际变量代表的内容,echo "$PATH"也不起作用。

答案1

你只需要逃避美元$

echo \$PATH
$PATH

或者用单引号括起来:

echo '$PATH'
$PATH

这将确保 shell 不会解释该单词。

答案2

$在大多数 shell 的语法中是一个非常特殊的字符。如果我们只看类似 Bourne 的 shell,它用于介绍:

  1. 参数扩展如$#, $var,${foo:-bar}
  2. 命令替换如下$(logname)(也在${ logname;}某些 shell 中以避免子 shell)
  3. 算术扩展如$((1+1))(也在$[1+1]某些 shell 中)。
  4. 某些 shell 中的其他形式的引用,例如$'\n'or $"localized string"

除了最后一种情况外,这些扩展/替换仍然发生在双引号内(以及$"..."in bashor内ksh93

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

  • 单引号:echo '$PATH'echo '$'PATH.您通常想要使用的字符,因为它会转义大多数 shell 中的所有字符(除了它本身)。
  • 黑斜杠:echo \$PATH.也在双引号内:echo "\$PATH"
  • 在某些 shell 中,还有其他一些引用运算符:echo $'$PATH', echo $'\44PATH'(假设 ASCII 兼容的字符集),echo $'\u0024'

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

  • echo "$"PATH
  • echo $""PATH,echo $"PATH" .应该避免这些,因为有些 shell 喜欢ksh93bash支持$"..."引号的形式。
  • echo $``PATH。除了表明这是可能的之外,您没有任何理由想要使用它。
  • echo "${$+$}PATH"以及其他复杂的...

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

  • 与 Unix 兼容echo:(echo '\044PATH'其他一些echo需要echo -e '\044PATH'
  • printf '\44PATH\n'
  • 猫 << \EOF
    $路径
    EOF

请注意这些反斜杠需要如何引用,因为它们显然对于 shell 来说也是特殊的。

希望现在应该清楚,尽管有很多方法可以做到这一点,但没有充分的理由您想使用除echo '$PATH'这里之外的其他方法。

答案3

请注意,双引号内的文字 $ 可能会出现问题。可以通过在双引号外生成 $ 来完成,如下所示:

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

答案4

使用:

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

这会起作用。

相关内容