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

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

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

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

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

例如:

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

如果我使用其中之一,我可能无法使用(格式化)变量,这是否与我有关,或者这只是个人喜好?

答案1

单引号和双引号之间存在差异,这不是样式问题。单引号实际上会回显您所写的内容,因此您可以确定您所写的就是将打印的内容。另一方面,双引号将插入变量的值。

man bash

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

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

所以在你的例子中:

#!/bin/bash
PLACE="World"
echo "Hello $PLACE !"
echo 'Hello $PLACE !'

将产生以下输出:

Hello World !
Hello $PLACE !

答案2

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

双引号内的变量被扩展。

单引号防止字符串插值:

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

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

答案3

这取决于语言。您提到了 bash,其他答案都集中在这一点上,但您提出问题的方式表明您认为这里存在一般规则。没有。

例如,想到一些随机出现的语言:

  • bash(和其他sh类似的 shell)中,"..."扩展字符串内的变量,但'...'不扩展。天知道csh 做了什么。
  • 在 Python 中,两者是等效的,您几乎可以根据口味或便利性在它们之间进行选择。
  • 在类 C 语言中,"..."是字符串,'x'是单个字符,'abc'是语法错误。
  • 在 Lisp 中,"..."是一个字符串,'“引用”其后的任何内容。
  • 在配置文件中,“正确”的引号可能是“...”或'...'"..."[...]|...|或或被配置的程序的作者认为是一个好主意的任何内容。
  • 在 Postscript 中,字符串用 标记(...)
  • 在(有点古老的)Fortran 中,5 个字符的字符串“hello”可以写为5Hhello(也就是说,这是一个没有任何类似于引号的字符串标记的示例)。
  • 在英语中他们筑巢“我向他打招呼”或者“我对他说‘你好’”取决于您的编辑住在大西洋的哪一边。
  • 我相信,只要有时间,人们可以想出一些更加神秘的例子。

那些,仅有的Python 是一种品味或风格的问题。引号只是另一种语言语法。

相关内容