加入收藏 | 设为首页 | 会员中心 | 我要投稿 大连站长网 (https://www.0411zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

终于了解Shell中单引号双引号的区别了

发布时间:2021-10-28 04:06:35 所属栏目:系统 来源:互联网
导读:在编写 shell 脚本或输入命令时,你可能已经注意到大多数命令都可以使用单引号 或双引号, 这不仅适用于 shell 脚本,而且适用于所有 Bash 命令, 但是两种类型的引号以及 Bash shell 解释它的方式之间存在一定的差异,下面将介绍它们之间的不同单引号用单
在编写 shell 脚本或输入命令时,你可能已经注意到大多数命令都可以使用单引号 或双引号, 这不仅适用于 shell 脚本,而且适用于所有 Bash 命令, 但是两种类型的引号以及 Bash shell 解释它的方式之间存在一定的差异,下面将介绍它们之间的不同   单引号 用单引号 ' ' 括起来的字符会保留引号内每个字符的字面值   简而言之,shell 将逐字解释单引号内的封闭文本,并且不会插入任何内容,包括变量、反引号、某些 转义符等   单引号中的任何字符都没有特殊含义, 当你不想使用转义字符来更改 shell 脚本解释输入字符串参数方式时,就会很方便   双引号 双引号类似于单引号,只是它允许 shell 解释美元符号 ( $ )、反引号 ( ` )、反斜杠 ( ) 和感叹号 ( ! ), 这些字符与双引号一起使用时具有特殊含义,并且在显示之前对其进行评估   双引号可以通过在双引号前加上反斜杠来使用其自身   实例 下面通过几个实例来说明 单引号 和 双引号之间的一些区别   实例1 新建 shell 脚本 t1.sh ,内容如下   #!/bin/bash    a=98  echo "$a"  echo '$a'  执行 ./t1.sh 命令,结果如下   [root@localhost quotes_test]# ./t1.sh   98  $a  从结果可以看出,双引号中的 $a 被解释为变量 a 的值   但是单引号中的 $a 只是原样输出,单引号不会解释其中的 $ 以及 a 字符   实例2       双引号中的 n 会被转义成换行符n,但在单引号内,n 被当成普通字符与同一行的其他字符一起显示   实例3   新建 shell 脚本 t2.sh, 内容如下   #!/bin/bash    ary[0]=8  echo "${ary[0]}"  echo '${ary[0]}'  执行脚本,结果如下   [root@localhost quotes_test]# ./t2.sh   8  ${ary[0]}  从结果可以看出,当 ${ary[0]} 用双引号括起来时,表示数组的第一个元素,所以输出 8   但是,被单引号括起来时,被当做单纯的字符输出,并不会解释为数组的第一个元素   实例4   新建 shell 脚本 t3.sh, 内容如下   #!/bin/bash    a=45  echo "'$a'"  echo '"$a"'  执行脚本,结果如下   [root@localhost quotes_test]# ./t3.sh   '45'  "$a"  由上面的结果可知,单引号在双引号内没有特殊的含义,因此,即使 $a 在单引号内,也还是会解释成 45   但是,当双引号在单引号内时,即使 $a 位于双引号内,也不会对变量 a 求值, 还是按照普通字符输出   实例5   新建 shell 脚本 t4.sh, 内容如下   #!/bin/bash    a=" $(printf hello) "  # 相当于 " `printf hello` "  b=' $(printf hello) '  # 相当于 ' `printf hello` '  echo $a  echo $b  执行脚本,结果如下   [root@localhost quotes_test]# ./t4.sh   hello  $(printf hello)  从结果可以知道,双引号中的 $(printf hello) 会被解释成 printf hello 命令,执行 echo $a 命令相当于执行了 printf hello , 结果输出 hello   单引号中的 $(printf hello) ,只是表示普通字符而已,所以 echo $b 命令的结果是 $(printf hello) 字符的原样输出   小结 本文介绍了 shell 中单引号和双引号的区别,主要是通过实例的方式来展示他们之间的不同点,熟悉了它们的不同点后,在编写 shell 脚本过程中,就不会在单双引号上出错了

(编辑:大连站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!