命令行上双引号“”,单引号“和反引号”之间的区别?
我经常看到网站上的教程或本网站上的post,这些教程在命令行中大量使用了以下字符。 通常它们似乎用于非常相似的目的。 在命令行上使用或shell编程时,它们之间有什么区别? 我出于什么目的使用它们中的哪一个?
" " double quotes ' ' single quotes ` ` backticks
为了举例,考虑变量foo
包含uname
( foo=uname
)。
-
echo "$foo"
输出uname
,替换文本中的变量。- 对于
"
引号内的文字$
字符,请使用\$
;作为文字"
,使用\"
。
- 对于
-
echo '$foo'
输出$foo
,确切的字符串。- 甚至
'
不能在'
引号内'
转义为\'
'
。 但你可以使用'foo'\''bar'
。
- 甚至
-
echo `$foo`
输出Linux
,执行变量的内容并echo
打印它。
在bash手册的相关部分中对此进行了很好的解释。 简而言之,单引号内的任何内容都按字面解释。 所以,例如:
$ echo '$SHELL' $SHELL $ echo '{1..3}' {1..3}
将其与未加引号的版本进行比较:
$ echo $SHELL /bin/bash $ echo {1..3} 1 2 3
双引号允许变量扩展(也包括历史扩展和其他一些东西)。 基本上,当您处理想要扩展的内容时,可以使用它们。 例如:
$ echo "$SHELL" /bin/bash $ echo "!!" echo "echo "$SHELL"" echo /bin/bash
换句话说,单引号完全保护字符串不受shell的影响,而双引号保护某些内容(例如空格),但允许正确扩展/解释变量和特殊字符。
单引号( ''
)用于保留引号中包含的每个字符的文字值。
使用双引号( ""
),保留所有字符的文字值,除了美元符号( $
),反引号(向后单引号, ``
)和反斜杠( \
)。
当封闭在back-ticks( ``
)中时,shell将某些东西解释为“后面滴答内的命令输出”。 这被称为“命令替换”,因为命令的输出代替命令本身。
引用:
echo '$HOME' is "$HOME"
单引号阻止变量扩展,而双引号允许它。
我只是在谈论一般但是:
""
– 用于在输出之前处理它们内部的一些信息。 (就像PHP一样。)
- 例如:
name=NESS; echo "Hello my name is $name"
name=NESS; echo "Hello my name is $name"
将输出:Hello my name is NESS
''
– 用于显示输出。 (也像在PHP中一样。)
- 使用上面的例子,它将输出
Hello my name is $name
因此,双引号和单引号之间的区别在于双引号处理变量并显示值,而单引号显示变量的名称而不进行处理。
``
– 用于引用稍后分配给另一个变量的命令。
单引号包含一个字面值:所有类型的扩展都被抑制。 通常在值包含或可能包含空格(空格,制表符,换行符)或特殊字符( $
, \
, `
)时使用,用户不希望shell特别扩展/处理。
双引号括起一个值,该值将包含变量,并完成字符替换。 输出可能包含空格时必需,并且必须指定为单个值。
后引号括起一个命令,其结果需要作为值。 较新的shell允许使用$(...)
代替`...`
。 我更喜欢新方法。
以下代码可能有助于了解正在发生的事情。
CMD ='ls。' echo sq:$ CMD 设置$ CMD echo raw 1:$ 1 echo raw:$ * 设置“$ CMD” echo dq:1美元 echo bq:`$ CMD` echo new:$($ CMD)