三天了,看到这个问题还是没人回答,内心不知是该认为是情理之中还是为题主惋惜。。。
这其实就是三个shell的基础知识,逐一拆解如下:
①单引号
单引号是一种强引用,在没有其他引号作用的情况下,会将第一个单引号到第二个单引号之间的内容作为字符串,不做任何转换地输出出来,即不解析特殊字符
②双引号
双引号是一种弱引用,跟单引号的区别在于,可以解析特殊字符,比如如果存在变量REPLY,那么 $REPLY 在双引号里会被置换成变量值。而如果要忽略特殊字符,需要使用反斜杠(\)转义
③echo
echo 命令的作用就是输出跟在其后的文本(官方解释:display a line of text)。不带引号的文本,和被双引号括起来的文本,是一样的,即
echo "$REPLY" 等同于 echo $REPLEY
而 echo "\$REPLY" 等同于 echo '$REPLY'
----------------------------------那么接下来分析下题主的例子----------------------------------
1.
# echo "this is a """$REPLY""" "
this is a game
这个例子并不是一对双引号带了一对三引号(题主怕不是有Python基础?),而是输出了5个部分,其中4个部分带了双引号。用颜色标注就如下:
所以输出的其实是: "this is a "、空、$REPLY、空、空格。
合起来就是:"this is a game "
2.
# echo "this is a '''$REPLY''' "
this is a '''game'''
上面说到,在没有其他引号作用的情况下,单引号才起到“不解析字符串”的作用,而在前面有一个双引号的情况下,单引号就只是单引号,最后以另一个双引号闭合,否则系统会报错
3.
# echo "this is a "game" "
this is a game
这个例子输出了三个部分,分别是:"this is a "、字符串game、空格
所以结果是:"this is a game "
4.
# echo "this is a 'game'"
this is a 'game'
在双引号里,单引号只是单引号,参考第2个例子