shell脚本----[]与` `的区别与联系

 [  ] 单双括号

基本要素:正则表达式

  [ ] 两个符号左右都要有空格分隔shell

  内部操做符与操做变量之间要有空格:如  [  “a”  =  “b”  ]编程

  字符串比较中,> < 须要写成\> \< 进行转义bash

   [ ] 中字符串或者${}变量尽可能使用"" 双引号扩住,避免值未定义引用而出错的好办法ide

  [ ] 中可使用 –a –o 进行逻辑运算ui

  [ ] 是bash 内置命令:[ is a shell builtinspa

[ ] 其实是bash 中 test 命令的简写。即全部的 [ expr ] 等于 test expr。字符串

 

 [[  ]] 双方括号

 

基本要素:it

  ` ` 两个符号左右都要有空格分隔class

  内部操做符与操做变量之间要有空格:如  [[  “a” =  “b”  ]]

   字符串比较中,能够直接使用 > < ,无需转义

  ` ` 中字符串或者${}变量尽可能如未使用"" 双引号扩住的话,会进行模式和元字符匹配,例如:若是*没有被双引号扩住,能够匹配全部字符

例如:

[lxj@localhost lxjwork]$ [[ "ab"=a* ]] && echo "ok"

ok

 

  [[ ]] 内部可使用 &&  || 进行逻辑运算

  ` ` 是bash  keyword:[[ is a shell keyword

 

 

` ` 其余用法都和[ ] 同样

  ` ` 和 [ ] 均可以和 ! 配合使用

优先级 

 !  >  && > || 

逻辑运算符  < 关系运算符

逻辑运算符  : !  &&  || -a  -o

关系运算符  : <  >  \> \<  ==  = !=  – eq –ne  -gt -ge  –lt  -le

 

3、 比较

[[]] 运算符只是[]运算符的扩充。 [[]] 可以支持<,>符号运算不须要转义符,[]中必须转义:\> \< 。

 

[[]]是以字符串比较大小。里面支持逻辑运算符:&& ||  ,再也不使用-a -o  。

 

对 test 命令来讲, 用 -eq 要进行数字比较,而你此时传入字符串,就报错了。

 

` expr ` 是bash中真正的条件判断语句,其语法更符合编程习惯 (好比 &&, || 的用法),在 ` ` 中 故意传字符串给 -eq 不会报错,bash实现中直接把非整数的字符串直接转换成了 0 (你能够自行验证,在 ` ` 中的,任何须要整数,可是提供又是其它不能转换成整数的字符串,都变成了0)。 这应该是bash实现中的没有对 ` ` 中 -eq 操做符两边的内容进行检查致使的。 对于咱们来讲,不必钻这些东西,咱们应该保证本身代码中的须要用到整数的时候,老是提供整数。

4、 [[  ]] 比[ ] 具有的优点

①[[是 bash 程序语言的关键字。并非一个命令,` ` 结构比[ ]结构更加通用。在[[和]]之间全部的字符都不会发生文件名扩展或者单词分割,可是会发生参数扩展和命令替换。

   

②支持字符串的模式匹配,使用=~操做符时甚至支持shell的正则表达式。字符串比较时能够把右边的做为一个模式,而不单单是一个字符串,好比[[ hello == hell? ]],结果为真。` ` 中匹配字符串或通配符,不须要引号。

   

③使用` `.``.``.` `条件判断结构,而不是[... ],可以防止脚本中的许多逻辑错误。好比,&&、||、<和> 操做符可以正常存在于` `条件判断结构中,可是若是出如今[ ]结构中的话,会报错。

   

④bash把双中括号中的表达式看做一个单独的元素,并返回一个退出状态码。

       

使用` `.``.``.` `条件判断结构, 而不是[ ... ], 可以防止脚本中的许多逻辑错误. 好比,&&, ||, <, 和> 操做符可以正常存在于[[]]条件判断结构中, 可是若是出如今[ ]结构中的话, 会报错。

相关文章
相关标签/搜索