在Linux shell中,我要打印:
$300
$400
但是当我执行echo -e "$300\n$400"
时,它显示:
00
00
当我做printf "$300\n$400"
时,它表示相同的内容!
那么,为什么shell会在它后面删除我的美元符号和数字?有没有办法打印我想要的东西?
答案 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
)
这也适用于显示其他运算符,例如=
,:
等。希望有帮助。