我正在尝试从全局中排除目录。
这在命令行下有效:
$ 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/
如何获取它以在脚本文件中正确展开?
答案 0 :(得分:2)
您错误地使用了外壳程序和正则表达式构造?
,^
使用的全局字符$
。您的示例中的for
循环不能不进行正则表达式匹配以排除所提供的目录,因为它仅进行路径名扩展(也称为glob扩展)
除非您通过启用{{1}中的^
和$
中的扩展glob选项extglob
让外壳知道将bash
和extendedglob
当作特殊对象, }},您无法实现自己想做的事。
所以您可能只需要
zsh
表示打印任何内容,但文件名与setopt extendedglob
print -rl ^BigDir*
匹配。