字符串是Shell中非常重要的部分,是最常用的数据类型之一,字符串有由单引号包围、由双引号包围和不使用引号三种表示形式。三种表示形式在变量解析、引号转义、空格、分号四个方面有所区别。
变量解析
1.单引号包围的字符串不解析任何变量,在其中使用的任何变量都是无效的,会原样输出。
2.双引号包围的字符串会解析遇到的变量,输出变量的值,而不是原样输出。
3.不使用引号的字符串也会解析遇到的变量。
引号转义
1.单引号包围的字符串不可以包含单引号,即使对单引号进行转义也不行。
2.双引号包围的字符串可以包含单引号,也可以包含双引号,包含双引号时需要使用“\”对双引号进行转义,单引号则不需要。
3.不使用引号的字符串可以包含单引号,也可以包含双引号,但是必须使用“\”对引号进行转义。
空格
1.单引号包围的字符串可以包含空格。
2.双引号包围的字符串可以包含空格。
3.不使用引号的字符串可以包含空格,但必须使用“\”对空格进行转义,否则空格后的内容会作为其他指令进行解析。
分号
1.单引号包围的字符串可以包含分号。
2.双引号包围的字符串可以包含分号。
3.不使用引号的字符串可以包含分号,但必须使用“\”对分号进行转义,否则分号后的内容会作为其他指令进行解析。
总结
三种形式的区别总结如下:
单引号包围 | 双引号包围 | 不用引号包围 | |
变量解析 | 否 | 是 | 是 |
单引号 | 否 | 是 | 是(需转义) |
双引号 | 是 | 是(需转义) | 是(需转义) |
空格 | 是 | 是 | 是(需转义) |
分号 | 是 | 是 | 是(需转义) |
简单示例
num=123
str1=show\ \"num\":\ $num\;; str2='show "num": $num;'
str3="show \"num\": $num;"
echo $str1
echo $str2
echo $str3
以上输出结果为:
show "num": 123;
show "num": $num;
show "num": 123;