shell用法总结3

109 阅读2分钟

引言

  • 该系列为个人经常需要将项目代码工程化,所以需要用到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中支持用()进行分组,[[ ]]均支持