认识 Shell 脚本里的中括号们——分析“[]”与“[[]]”的区别
2016-12-16 00:00
323 查看
摘要: `[` 属于 Shell 的内建命令,`[[` 属于 Shell 的保留关键字。
因为
我们先使用
而在使用上,
因为是命令,所以需要跟它的参数使用空格隔开,然后
而关键字不同,所以
双中括号中的表达式看作一个单独的语句,并返回其退出状态码。
而逻辑与(and)和逻辑或(or)在
最后,推荐使用
因为
test与
[是等价的,我们在之后的部分也偶尔提到它。
我们先使用
type命令检查一下:
$ type "test" "[" "[[" test is a shell builtin [ is a shell builtin [[ is a reserved word
test和
[属于 Shell 的内建命令,
[[属于 Shell 的保留关键字。
而在使用上,
test和
[等价:
$ test -f file && echo True True $ [ -f file ] && echo True True
因为是命令,所以需要跟它的参数使用空格隔开,然后
]作为最后一个参数表示条件结束,而像
<、
>符号就会被理解为重定向,导致错误:
$ [ 1 < 2 ] zsh: no such file or directory: 2
而关键字不同,所以
[[能够按照常规的语义理解其中的内容:
$ [[ 1 < 2 ]] && echo True || echo False True
双中括号中的表达式看作一个单独的语句,并返回其退出状态码。
而逻辑与(and)和逻辑或(or)在
[和
[[中的用法也不同:
[中使用
-a和
-o参数连接不同的条件,
[[中使用
&&和
||。
$ [ $a == 1 && $b == 1 ] && echo True || echo False [: ']' expected False $ [ $a == 1 -a $b == 1 ] && echo True || echo False True $ [[ $a == 1 && $b == 1 ]] && echo True || echo False True
最后,推荐使用
[[来进行各种判断,这能避免很多错误,比如
$a为空的情况下,
[ $a == 1 ]就是语法错误,因为
[命令拿到的实际上只有
==、
1、
]三个参数。
相关文章推荐
- 认识 Shell 脚本里的小括号们——分析“()”与“(())”的区别
- shell脚本分析 nginx日志访问次数最多及最耗时的页面(慢查询)
- 利用oprofile分析fortran并用gnuplot画图的shell脚本
- linux执行shell脚本的方式及一些区别
- shell脚本按行读取文本文件,并对读取的行进行分析
- c语言中调用shell脚本返回值问题分析
- shell脚本出错分析
- 一个shell脚本的分析(1)
- hadoop相关启动脚本分析 有助于troubleshoot,顺便学习shell
- shell脚本下的教你如果运用for,while,unti循环,以及区别l
- 第一章 Hadoop启动Shell启动脚本分析--基于hadoop-0.20.2-cdh3u1
- 关于shell unix下,直接执行shell与sh 执行 或加 . 脚本 的区别及含义
- 第一章 Hadoop启动Shell启动脚本分析--基于hadoop-0.20.2-cdh3u1
- linux 执行shell脚本的方式及一些区别
- 第一章 Hadoop启动Shell启动脚本分析--基于hadoop-0.20.2-cdh3u1
- ubuntu下shell脚本运行异常:bash和dash的区别
- shell 脚本中getopt 和 getopts 的区别
- shell脚本分析 nginx日志访问次数最多及最耗时的页面(慢查询)
- 在Linux中用source,dot(.)和直接用脚本文件名执行shell脚本的区别
- Hadoop的shell脚本分析