当前位置: 首页 > 科技观察

终于知道Shell中单引号和双引号的区别了

时间:2023-03-19 20:16:43 科技观察

本文转载自微信公众号《Linux开发那些事》,作者LinuxThings。转载此文请联系Linux开发那些事公众号.在编写shell脚本或键入命令时,您可能已经注意到大多数命令都可以使用单引号或双引号,这不仅适用于shell脚本而且适用于所有Bash命令,但这两种类型的引号都由Bashshell解释有一些它执行方式之间的区别,它们之间的区别如下所述单引号单引号中包含的字符''保留引号内每个字符的字面值简而言之,shell解释单引号内的封闭文本,没有任何内容将被插入,包括变量,反引号,某些\转义等。单引号内的任何字符都没有特殊意义,当你不想使用转义字符来改变解释输入的shell脚本时双引号在字符串参数时很方便都是一样的。双引号类似于单引号,除了它们允许shell解释美元符号($)、反引号(`)、反斜杠(\)和感叹号(!),双引号与它们一起使用时具有特殊含义,并且在显示前先求值双引号可以自己使用,在双引号前加上反斜杠一些区别例1新建一个shell脚本t1.sh,内容如下#!/bin/basha=98echo"$a"echo'$a'执行./t1.sh命令,结果如下[root@localhostquotes_test]#./t1.sh98$a变量a的值但是单引号里的$a只是原样输出,单引号不会解释里面的$和a字符实例2双引号里的\\n会转义成换行符\n,但是在单引号,\n将被视为普通字符并与其他字符一起显示在同一行Example3新建一个shell脚本t2.sh,内容如下#!/bin/bashary[0]=8echo"${ary[0]}"echo'${ary[0]}'执行脚本,结果如下[root@localhostquotes_test]#./t2.sh8${ary[0]}从结果可以看出,${ary[0]}用双引号括起来的时候,表示第一个数组的元素,因此输出8。但用单引号括起来时,输出为简单字符,不会被解释为数组第一个元素实例4新建一个shell脚本t3.sh,内容如下#!/bin/basha=45echo"'$a'"echo'"$a"'执行脚本,结果如??下[root@localhostquotes_test]#./t3.sh'45'"$a"从上面的结果可以看出单引号没有双引号内有特殊意义,所以,即使$a在单引号内,它仍然会被解释为45。但是,当双引号在单引号内时,即使$a在双引号内,变量a也不会求值,例5按普通字符输出新建shell脚本t4.sh,内容如下#!/bin/basha="$(printfhello)"#equivalentto"`printfhello`"b='$(printfhello)'#相当于'`printfhello`'echo$aecho$b执行脚本,结果如??下[root@localhostquotes_test]#./t4.shhello$(printfhello)从结果我们可以知道双引号中的$(printfhello)会被解释为printfhello命令,执行echo$a命令等同于Executeprintfhello,结果为sing中的$(printfhello)hello的le引号,只是普通字符的意思,所以echo$b命令的结果就是$(printfhello)字符的原始输出总结本文介绍单引号和双引号的区别,主要是为了说明举例说明它们之间的区别。当你熟悉了它们的区别之后,你在写shell脚本的过程中就不会犯单引号和双引号的错误了。