我经常看到网上的教程或本网站上的帖子在命令行中大量使用以下字符。通常看起来它们的用途非常相似。在命令行或 shell 编程中使用它们时,它们之间有什么区别?我应该出于什么目的使用它们中的哪一个?
" " double quotes
' ' single quotes
` ` backticks
答案1
为了举例,假设变量foo
包含uname
(foo=uname
)。
echo "$foo"
输出uname
,替换文本中的变量。- 对于引号
$
内的文字字符,使用; 对于文字,使用。"
\$
"
\"
- 对于引号
echo '$foo'
输出$foo
,精确的字符串。- 即使
'
不能在引号\'
内进行转义'
。但您可以使用'foo'\''bar'
。
- 即使
echo `$foo`
输出Linux
,执行变量的内容并echo
打印。
答案2
这在相关章节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 攻击,而双引号保护一些事物(例如空格),但允许变量和特殊字符正确扩展/解释。
答案3
单引号 ( ''
) 用于保留引号内的每个字符的文字值。
使用双引号 ( ""
),将保留括起来的所有字符的文字值,美元符号 ( $
)、反引号(向后单引号,``
)和反斜杠 ( \
) 除外。
当包含在反引号 ( ``
) 内时,shell 会将某些内容解释为“反引号内的命令的输出”。这称为“命令替换”,因为命令的输出被替换为命令本身。
参考:
答案4
我只是泛泛地谈论,但是:
""
- 用于在输出之前处理其中的一些信息。(就像在 PHP 中一样。)
- 例如:
name=NESS; echo "Hello my name is $name"
将输出:Hello my name is NESS
''
- 用于按原样显示输出。(也类似于 PHP。)
- 使用上面的例子,它将输出
Hello my name is $name
所以双引号和单引号的区别就在于双引号会处理变量,并显示值,而单引号则显示变量的名称,不进行处理。
``
- 用于引用稍后分配给另一个变量的命令。