glob模式不会在zsh中的文件内部扩展

时间:2018-11-20 03:50:48

标签: terminal zsh

我正在尝试从全局中排除目录。

这在命令行下有效:

$ export exclude=BigDir
$ for d in ^$exclude/ ; do echo "$d" ; done
SmallDir/
SmallerDir/
$

但是在文件中根本不起作用

#!/bin/zsh

exclude=BigDir
for d in ^$exclude/ ; do echo "$d" ; done

运行./test或我保存它会打印 literal 字符串

^BigDir/

如何获取它以在脚本文件中正确展开?

1 个答案:

答案 0 :(得分:2)

您错误地使用了外壳程序和正则表达式构造?^使用的全局字符$。您的示例中的for循环不能进行正则表达式匹配以排除所提供的目录,因为它仅进行路径名扩展(也称为glob扩展)

除非您通过启用{{1}中的^$中的扩展glob选项extglob让外壳知道将bashextendedglob当作特殊对象, }},您无法实现自己想做的事。

所以您可能只需要

zsh

表示打印任何内容,但文件名与setopt extendedglob print -rl ^BigDir* 匹配。