shell用法总结3
引言
- 该系列为个人经常需要将项目代码工程化,所以需要用到shell脚本,前段时间的每日一题非典活动虽然写了不少,但是因为要满足活动要求,所以很多函数等语法无法介绍完全,该文将介绍一个函数具体详细一些的用法
正文:关于[]和[[]]在shell编程中的区别(概括-下篇)
- 多数情况下[]和[[]]是可以通用的,根据查阅的资料显示两者的区别在于
- 上篇介绍的test函数与[ ]是符合POSIX标准的测试语句,兼容性更强,几乎可以运行在所有的Shell解释器中(注意几乎)
- 相比较而言[[]]仅可运行在特定的几个Shell解释器中(如Bash、Zsh等)
- 1 关于使用比较符号<和>,该符号在[[ ]]中用作排序,而[ ]不支持
- 如下图,我们使用例子进行验证
- 注:下面例子是使用ASCII码顺序,进行比较前先设置
LANG=C,在ASCII码顺序中,数字的ASCII码应该小于大写字母的

- 此处简单介绍一下&&和||,&&逻辑与表示:
command1 && command2 ,左边comma的1返回真,右边才会执行command2;逻辑非||,与逻辑与相反,||逻辑非表示: command1 || command2 ,左边comma的1返回假,右边才会执行command2
- 显然上图中[]是不识别> 或者<号的,而[[]]是可以的(注意部分的shell解释器中[]是支持该操作的)
- 2 关于在括号内对上述&&和||的识别
- [ ]中使用-a和-o表示逻辑与和逻辑或,[[ ]]使用&&和||来表示

- 3 关于==在[]和[[]]之中的不同含义
- 在[ ]中==是字符匹配,在[[ ]]中是模式匹配,模式匹配允许使用通配符
- 注:[ ]不支持正则匹配,[[ ]]支持用=~进行正则匹配


- 4 关于加()进行分组
- [ ]仅在部分Shell中支持用()进行分组,[[ ]]均支持
