当前位置: 首页 > Linux

Zsh开发指南(第十二篇[[]]的用法)

时间:2023-04-06 19:30:26 Linux

指南[[]]是我们比较熟悉的符号。我们从第一篇文章开始就一直在使用它,但我没有详细介绍它。使用,只用到了它的一小部分功能。本文详细介绍了[[]]的用法。比较字符串[[]]最常用的功能之一是比较字符串,这是我们一直使用的功能。#匹配%[[abc==abc]]&&echogoodgood#=和==一样,最好用一个%[[abc=abc]]&&echogoodgood#不匹配%[[abc!=abd]]&&echogoodgood#正则表达式匹配%[[abc=~a.c]]&&echogoodgood#前一个字符序列比后者小%[[abcbcd]]&&echogoodgood#没有>=和<=%[[cde>=bcd]]&&echogoodzsh:parseerrornear`bcd'除了使用等号,不等式标志等比较,还有可以判断字符串是否为空:%str=abc#判断字符串内容的长度是否大于0,相当于(($#str))%[[-n"$str"]]&&echogoodgood%str=""#判断字符串是否为空,相当于((!$#str))%[[-z"$str"]]&&echogoodgood但是对于两者用法,我们还有其他更方便的实现方法,没必要用。判断文件[[]]还有一个很重要的功能就是判断文件,比如判断某个文件是否存在,是否是目录,是否可读等。判断/bin/zsh文件是否存在:%[[-e/bin/zsh]]&&echogoodgood%[[-e/bin/zshh]]&&echogood-e可以替换为如下选项,其中用法一致:选项满足条件的文件-b块设备文件-c字符设备文件-d目录-e任何存在的文件-f普通文件,包括符号链接,不包括目录、设备文件、套接字、FIFOs-gsetgid设置文件-h符号链接-k设置粘滞位的文件-pFIFO文件-r当前进程可读的文件-s非空文件-u设置setuid的文件-x当前进程可执行的文件File-w可写的文件当前进程-L符号链接(同-h)-O当前进程用户拥有的文件-G当前进程用户组拥有的文件-Ssocket文件-Natime同mtime还有一个特殊的-t选项:#$$是当前进程id%ls/proc/$$/fd0110112%[[-t10]]&&echogoodgood%[[-t3]]&&echogood-t后面应该跟一个数字(如果没有就相当于0),判断当前进程是否打开了对应的fd(进程默认会打开0、1、2这三个fd,对应标准输入,标准输出和错误输出,另外,每次打开一个文件,管道或者网络连接,都会有一个对应的fd,关闭后对应的fd就会消失)。比较文件除了判断单个文件是否满足条件外,[[]]还可以用来比较两个文件。#file1比file2新%[[file1-ntfile2]]#file1比file2旧%[[file1-otfile2]]#file1和file2是否对应同一个文件(相同路径或相互硬链接)%[[file1-effile2]]比较值[[]]也可以用来比较值,注意不要用等号,大于号,小于号等进行比较,有一个一系列特殊符号。通常我们不需要使用[[]]来比较值,使用(())更方便。#-eq是判断两个值是否相等%[[12-eq12]]&&echogoodgood-eq可以换成下面的符号,用法是一样的:符号含义-eq等于-neis不等于-lt<-gt>-le<=-ge>=combination#&&是逻辑AND%[[a==a&&b==b]]&&echogoodgood#||是逻辑或%[[a==a||a==b]]&&echogoodgood#!是合乎逻辑的%[[!a==b]]&&echogoodgood#可以一起使用,!具有最高优先级,然后是&&,然后是||%[[!a==b&&b==a||b==b]]&&echogoodgood#如果不确定优先级可以加括号%[[((!a==b)&&b==a)||b==b]]&&echoGoodgood需要注意空格,[[]]里面和内容之间需要一个空格,==两边也需要一个空格。如果直接在zsh中输入,必须在!后面加一个空格,否则会被解析成历史命令。[]符号除了[[]]符号外,[]符号(它是古代测试命令的化身)也可以用来判断字符串、文件、值等,但功能并不完善如[[]],只支持上面列出的一些函数(==,=~,>,<,(,)不支持,逻辑和或的语法不同,无法调整优先级,使用起来很不方便),通常不需要使用[](如果需要使用,可以通过mantest查看用法)。小结本文详细介绍了[[]]的用法,基本面面俱到。参考http://www.bash2zsh.com/zsh_r...本文不再更新,全系列文章更新维护在这里:github.com/goreliu/zshguideWindows、Linux付费解决方案,Shell,C,C++,AHK,Python,JavaScript,Lua等相关问题,定价灵活,欢迎咨询,微信ly50247。