Zsh补全脚本中-nt运算符的含义及有效性确认
搞懂Zsh补全脚本里的
-nt运算符:它绝对不是笔误! 嘿,我来帮你理清这个-nt的事儿——它完全是合法的shell运算符,不管是Zsh还是Bash这类主流shell都支持,绝对不是作者写错了。
1. -nt的具体含义
-nt是"newer than"的缩写,专门用来比较两个文件的修改时间:
- 语法格式:
file1 -nt file2 - 判断逻辑:当
file1的修改时间比file2新,或者file1存在但file2不存在时,这个表达式会返回真(shell里的0值);反之则返回假。
2. 结合你的代码片段拆解逻辑
看这段核心判断代码:
if ! [ -r $cache -a -s $cache ] || [ "$squeezy" -nt $cache ] then command squeezy -options | tr ' ' '\n' | grep '^-[a-zA-Z0-9]' > $cache fi
这个if语句的意思是,只要满足以下任意一个条件,就会重新生成补全缓存文件$cache:
- 条件一:缓存文件
$cache不可用——要么无法读取(! -r $cache),要么是空文件(! -s $cache),-a是逻辑与,!对整个组合条件取反; - 条件二:
squeezy工具本身的修改时间比缓存文件新——这说明工具可能被更新过,之前的缓存补全选项已经过时,需要生成最新的列表。
3. 额外小补充
和-nt对应的反向运算符是-ot(older than),用来判断file1的修改时间比file2旧,用法和-nt完全一致。
内容的提问来源于stack exchange,提问作者Tobias Bruns
相关产品推荐
相关产品推荐

