" 和 ' 之间有什么区别 - 以及何时使用它?

Tro*_*wut 9 bash quoting

我习惯于键入带引号的字符串,但从现在起,当我浏览配置文件和建议时,我会看到使用了撇号。

我经常将撇号的东西复制到我的配置文件中,并用我的引号替换它,以便代码组合在一起。

但它们的区别是什么?(我主要针对 bash 使用它。如果其他基于 Linux 的脚本的做法不同,那将是额外的。)

例如:

echo "Hello World!" 和 echo 'Hello World!'

如果我使用一个或另一个,我可能无法使用(格式化的)变量,或者这只是个人喜好,有什么关系吗?

dr_*_*dr_ 15

单引号和双引号是有区别的,不是风格问题。单引号将逐字地回应您所写的内容,因此您可以确保所写的内容将被打印出来。另一方面,双引号将插入变量的值。

来自man bash:

将字符括在单引号中会保留引号内每个字符的字面值。单引号之间不能出现单引号,即使前面有反斜杠。

双引号中的字符会保留引号内所有字符的字面值,但 $、反引号、\ 和启用历史扩展时的 ! 除外。字符 $ 和反引号在双引号内保留其特殊含义。反斜杠仅在后跟以下字符之一时保留其特殊含义:$、`、"、\ 或换行符。双引号可以通过在双引号内加上反斜杠来引用。如果启用,历史扩展将被除非出现在双引号中的 ! 使用反斜杠进行转义,否则不会删除 ! 之前的反斜杠。

所以在你的例子中:

#!/bin/bash
PLACE="World"
echo "Hello $PLACE !"
echo 'Hello $PLACE !'
Run Code Online (Sandbox Code Playgroud)

将导致此输出:

Hello World !
Hello $PLACE !
Run Code Online (Sandbox Code Playgroud)

  • 这不是非常相关,但我想指出,在*许多*带有单引号和双引号字符串的语言中,*如果*存在差异,那么*通常*就是这样。双引号字符串通常允许某种形式的扩展,而单引号字符串通常不允许。 (2认同)

phg*_*phg 5

https://www.gnu.org/software/bash/manual/bashref.html#Quoting

内部双引号变量被扩展。

单引号防止字符串插值:

将字符括在单引号中会保留引号内每个字符的字面值。单引号之间不能出现单引号,即使前面有反斜杠。

还有$'…'允许使用 ANSI C 转义序列的符号。

  • [bash 中单引号 $'string' 和双引号 $"string" 的区别是什么?](http://unix.stackexchange.com/q/304133/44425) (2认同)