时间:2017.11.16
作者:李强
参考:man,info,magedu讲义
声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。
以下内容引用自博客园 ---刨根问底_liang
https://www.cnblogs.com/DengGao/p/6344830.html
一、单引号和双引号
单引号和双引号,都是为了解决中间有空格的问题。
因为空格在Linux中时作为一个很典型的分隔符,比如string1=this is astring,这样执行就会报错。为了避免这个问题,因此就产生了单引号和双引号。
他们的区别在于,单引号将剥夺其中的所有字符的特殊含义,而双引号中的'$'(参数替换)和'`'(命令替换)是例外。所以,两者基本上没有什么区别,除非在内容中遇到了参数替换符$和命令替换符`。
所以下面的结果:
[lq@centos6 ~]$num=3 [lq@centos6 ~]$echo '$num' $num [lq@centos6 ~]$echo "$num" 3 [lq@centos6 ~]$echo "\"$num\"" "3" [lq@centos6 ~]$
所以,如果需要在双引号””里面使用这两种符号,需要用反斜杠转义。
二、反引号``
这个东西的用法,和$()是一样的。在执行一条命令时,会先将 ``中的语句,或者是$() 中的语句当作命令执行一遍,再将结果加入到原命令中重新执行。
例如:echo `ls`会先执行 ls 得到xx.sh等,再替换原命令为:echo xx.sh最后执行结果为xx.sh那么,平时我们遇到的把一堆命令的执行结果输出到一个变量中,需要用这个命令替换符括起来,也就可以理解了。
echo '$(pwd)' 我们知道单引号只是将多个内容括起来输出并不做任何解释,结果还是$(pwd)
echo "$(pwd)",双引号会对里面的变量转义字符等作出解释,所以输出结果就是 echo `pwd`的pwd命令的执行结果。
所以其实可以说是2种引号,单引号双引号,反引号是‘’$(command)‘’的另一种简化写法罢了
[lq@centos6 ~]$echo '$(pwd)' $(pwd) [lq@centos6 ~]$echo "$(pwd)" /home/lq [lq@centos6 ~]$echo `pwd` /home/lq [lq@centos6 ~]$
ps: 个人理解:单引号和双引号的作用就是把一些字符给当做一个字符串来一起处理,单引号会把' '里的内容当做整体的一个string, 而双引号""虽然把一些字符给引起来当做一个string来处理,但是string里包含的一些对于其使用者来说有意义的特殊字符是会使用其特殊含义的,这个使用者如果不想用其特殊含义,就使用转义字符\,或者直接使用'',但是如果string里还有我们想要的特殊字符的特殊作用的话,就是把需要使用原意的特殊字符用转义符号转义,不需要的就不转义,然后是用""引起来。
ls "(a)" 这里对于其使用者ls来说()暂时没特别含义就可以直接使用,或者ls '(a)' ,可以表示我们查看(a) 这个文件。
ls 'a' 如果我们这么看只能查看a的文件,如果文件本身是 'a' ,那么我们可以使用 ls "'a'" 来查看 'a' 文件,双引号不解释'',单引号不解释"" ,是一种组合使用方法
在变量中,[ ] 可以用来判断,如果这个时候判断的是数字之间的判断,那么[ "$var" -eq 10 ] ,这个时候我们是不能对$var用双引号引起来的,因为引号代表这里面的是字符串string类型的数据,是不能和10进行比较的。会出现参数错误。