码迷,mamicode.com
首页 > 系统相关 > 详细

shell中[ ]和[[ ]]命令的区别

时间:2019-03-13 21:24:18      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:exp   ansi   语法错误   split   条件判断   filename   参数   echo   语法   

1.在[[ ]]中不会进行word splitting和filename expansion,而在[ ]中会进行,当变量a为空时,[ -n $a ]和[ -z $a ]都会返回0,这不是我们期望的结果,原因在于进行参数展开($a)后,会进行word splitting,而a为空,word splitting会移除空值,所以[ -n $a ]和[ -z $a ]实际是执行[ -n ]和[ -z ],而[ ]中仅一个参数时且非空都是返回0的,所以 使用[ ]进行条件判断时,最好加上引号

buddy@buddy-PC:~$ a="1 2"
buddy@buddy-PC:~$ [ -n $a ]
bash: [: 1: 需要二元表达式
buddy@buddy-PC:~$ [[ -n $a ]]
buddy@buddy-PC:~$ [ -n "$a" ]
buddy@buddy-PC:~$ a=
buddy@buddy-PC:~$ 
buddy@buddy-PC:~$ [ -n $a ]
buddy@buddy-PC:~$ echo $?
0
buddy@buddy-PC:~$ [ -z $a ]
buddy@buddy-PC:~$ echo $?
0
buddy@buddy-PC:~$ [[ -n $a ]]
buddy@buddy-PC:~$ echo $?
1
buddy@buddy-PC:~$ [[ -z $a ]]
buddy@buddy-PC:~$ echo $?
0
buddy@buddy-PC:~$ 

  buddy@buddy-PC:~$ [[ -n ]]
  bash: 一元条件运算符使用了未预期的参数 `]]‘
  bash: `]]‘ 附近有语法错误
  buddy@buddy-PC:~$ [ -n ]
  buddy@buddy-PC:~$

 

shell中[ ]和[[ ]]命令的区别

标签:exp   ansi   语法错误   split   条件判断   filename   参数   echo   语法   

原文地址:https://www.cnblogs.com/buddy916/p/10526273.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!