单引号,还是双引号
入门。
- C/Java:单引号表示字符(char),而双引号表示字符串(string)
- JSON:只允许双引号
- JavaScript/HTML:单引号双引号通用,单引号的字符串中可以有双引号,双引号的字符串中可以有单引号(不需要转义
\'
或\"
)。另,JavaScript 可以使用反引号(back-tick),也就是`
,来表示 Template literals,其中的变量会被展开。 - PHP/Hack:单引号表示静态字符串,其中的变量不会被展开;双引号会插入变量的值
放弃?
用任何一种以上情况好像都解释不了下面这个 bash 的例子:
$ str='cat dog'
$ printf $str
cat
所以……狗呢?!
进阶!
printf
的第一个参数是format string
,后面跟着的是argument
,所以cat
被当成了format
,而这个格式字符串又没有什么需要被替代的,所以被直接打印了出来成了cat
。如果我们在format
串中加入例如%s
,在打印的时候%s
就会被后面的dog
取代。
$ str='cat_%s dog'
$ printf $str
cat_dog
那如果就要打印最原始的字符串怎么办?在printf
的时候加上双引号
$ printf "$str"
cat dog
或者添加一个format
串,然后把str
当成参数:
$ printf '%s\n' "$str"
cat dog
注意这里只能是双引号,因为单引号的话类似 PHP,其中的变量是不会被展开的,而是被当成静态的字符串:
$ printf '$str'
$str