Shell脚本中[] 和 [[]] 的区别

shell脚本中[] [[]]总是太模糊,在这里记录一下,不断完善

-z and -n

-z用于判断变量为空,如果为空返回0,判断为true,如果非空返回1,判断为false,

-n用于判断变量不为空,如果不为空返回0,判断为true,如果为0返回1,判断为false

在中括号中,判断变量的值,加不加双引号的问题

pid="123"

[ -z "$pid" ] 单对中括号变量必须要加双引号

[[ -z $pid ]] 双对括号,变量不用加双引号

[ -n "$pid" ] 单对中括号,变量必须要加双引号

[[ -z $pid ]] 双对中括号,变量不用加双引号

多个条件判断,[] [[]] 的区别?

[[ ]] 双对中括号内,是不能使用 -a 或者 -o的参数进行比较的,只能用&& 和 ||

[[ 5 -lt 3 || 3 -gt 6 ]] 一个条件,满足,就成立 或者的关系

[[ 5 -lt 3 || 3 -gt 6 ]] 一个条件满足,就成立 或者的关系

 

[[ 5 -lt 3 ]] || [[3 -gt 6 ]]

[[ 5 -lt 3 ]] || [[3 -gt 6 ]] 写在外面也可以

 

[[ 5 -lt 3 -a 3 -gt 6 ]] [[ 5 -lt 3 -a 3 -gt 6 ]] -a 和 -o就不成立了,是因为,[[]] 双对中括号,不能使用 -o和 -a的参数,直接报错。

[ ] 可以使用 -a -o的参数,但是必须在 [ ] 中括号内,判断条件,例如:

[ 5 -lt 3 -o 3 -gt 2 ] 或者条件成立

[5 -lt 3 ] -o [ 3 -gt 2] 或者条件, 这个不成立,因为必须在中括号内判断

如果想在中括号外判断两个条件,必须用&& || 比较

[5 -lt 3 ] || [ 3 -gt 2]

[5 -gt 3 ] && [ 3 -gt 2] 成立

|| 和 && 不能在中括号内使用,只能在中括号外使用

 

posted on 2022-02-24 09:44  sudochen  阅读(994)  评论(0编辑  收藏  举报

导航