shell脚本----[]与[[ ]]的区别与联系
来源:互联网 发布:sql 2000 win7 64 编辑:程序博客网 时间:2024/06/17 03:13
注意[
和test
是 Shell 的内部命令,而[[
是Shell的关键字。 且 shell 以0作为true返回
#!/bin/bash
if [ 0 ];then
echo "0"
fi
if [ 0 ];then
echo "0"
fi
输出 0
一、 [ ] 单双括号
二、 [[ ]] 双方括号
三、 比较
四、 [[ ]] 比[ ] 具备的优势
Shell test 单中括号[] 双中括号[[]] 的区别
在写Shell脚本的时候,经常在写条件判断语句时不知道该用[]
还是 [[]]
,首先我们来看他们的类别:
$type [ [[ test[ is a shell builtin[[ is a shell keywordtest is a shell builtin
[
和test
是 Shell 的内部命令,而[[
是Shell的关键字。
$test -f settings.py && echo TrueTrue$[ -f settings.py ] && echo TrueTrue
[
和test
是相等的。
$[ 2 < 1 ] && echo True || echo FalseTrue$[[ 2 < 1 ]] && echo True || echo FalseFalse
既然是命令, 它就和参数组合为一体被 shell 解释,那样比如 ">" "<" 就被 shell 解释为重定向符号了。关键字却不这样。
x=1y=1$[ $x == 1 && $y == 1 ] && echo True || echo False-bash: [: missing `]'False$[[ $x == 1 && $y == 1 ]] && echo True || echo FalseTrue$[ $x == 1 -a $y == 1 ] && echo True || echo FalseTrue
在[[
中使用&&
和||
表示逻辑与和逻辑或。[
中使用-a
和-o
表示逻辑与和逻辑或。
$[[ 'abcd' == a*d ]] && echo True || echo FalseTrue$[ 'abcd' == a*d ] && echo True || echo FalseFalse
[[
支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。
总结:
使用[[ ... ]]条件判断结构,而不是[ ... ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,
但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]]
如果不使用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]
或者if [ $a -ne 1 -a $a != 2 ]
bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。
$[ !(pip list | grep pip) ] && echo True || echo False-bash: [: too many argumentsFalse$[[ !(pip list | grep pip) ]] && echo True || echo FalseTrue
参考
http://blog.csdn.net/taiyang1987912/article/details/39551385http://blog.csdn.net/yongan1006/article/details/7195303
0 0
- shell脚本----[]与[[ ]]的区别与联系
- shell脚本--命令替换``(反引号)与$()的区别与联系
- Makefile与shell脚本区别
- Makefile与shell脚本区别
- Makefile与shell脚本区别
- Makefile与shell脚本区别
- Makefile与shell脚本区别
- Makefile与shell脚本区别
- Makefile与shell脚本区别
- Makefile与shell脚本区别
- shell脚本中$@与$#区别
- Makefile与shell脚本区别
- shell 脚本 与 shell 脚本的编写
- &&和&的联系与区别
- shell 脚本中set-x 与set+x的区别
- shell 脚本中set-x 与set+x的区别
- 【Shell脚本】运行shell脚本文件的几种方法与区别
- 单独运行shell脚本与crontab运行shell脚本的区别
- android JSON数据解析问题
- TeXstudio下使用IEEEtran模板的问题
- LeetCode (Add Two Numbers)
- android N版本 SystemUI显示问题。
- ScrollView 中 第一个CELL 异常错位
- shell脚本----[]与[[ ]]的区别与联系
- linux使用yum错误
- 目录按钮
- firefox IDE录制web自动化脚本
- java-代码块
- Linux(centos6.5)下安装jenkins
- 图像学习 -- Sobel算子检测图像边缘
- AlarmManager每2分钟执行一个任务,实际却是每2的整数倍执行
- angular框架的一些理解