我想在外壳中打印$,但始终将其删除

时间:2019-03-02 10:01:08

标签: shell

在Linux shell中,我要打印:

$300    
$400

但是当我执行echo -e "$300\n$400"时,它显示:

00      
00

当我做printf "$300\n$400"时,它表示相同的内容!

那么,为什么shell会在它后面删除我的美元符号和数字?有没有办法打印我想要的东西?

4 个答案:

答案 0 :(得分:3)

由于您使用的是双引号,因此需要转义美元$,这将确保外壳不会解释该词。

$ echo -e "\$300\n\$400" 
$300
$400

您可能知道如何访问变量,

示例:

$ test="foo"
$ echo "$test"
foo

假设您要打印$test,则可以使用其中任何一个

$ echo "\$test"
$test

或用单引号

$ echo '$test'
$test

答案 1 :(得分:1)

在外壳中,$字符具有特殊含义。它的意思是“用该名称的变量的值替换$及其后的单词或数字或特殊字符”。例如:

currency='EUR'
echo "The currency is $currency"

变量0、1、2等包含程序的命令行参数。因此,如果您以my-program Hello, world的身份运行程序,则可以编写以下代码:

echo "argument 1 is $1"
echo "argument 2 is $2"
echo "both together are $1 $2, and all arguments are $*"

要使$字符失去特殊含义,必须将其写为\$。例如:

price=123
echo "The price is $price\$"

第一个$指向变量,第二个$转义。

或者,您可以将字符串用'single quotes'括起来,从而消除了所有字符的特殊含义。

要了解有关此主题的更多信息,请运行man bash命令并阅读有关变量扩展的部分。

答案 2 :(得分:0)

您可以使用单引号。用单引号(')括起来的字符应保留单引号内每个字符的字面值,而用双引号(“)括起来的字符应保留双引号内的所有字符的字面值,且字符反引号,美元符号和反斜杠除外。

echo -e '$'300"\n"'$'400

答案 3 :(得分:0)

$对外壳有特殊含义;当看到$时,它期望遵循现有的shell变量名称。例如,$PATH

在您的情况下,您不希望外壳程序认为您正在尝试打印外壳程序变量的值,因此必须告诉外壳程序$确实是您想要的内容显示。如其他答案所述,可以在其前面加上反斜杠来完成此操作。

在字符前加反斜杠称为转义字符(是的,不是最明显的术语),并且您已经在不知不觉中使用了一些转义字符。 (\n

这也适用于显示其他运算符,例如=:等。希望有帮助。