bash - bash:全局否定和多种模式的问题
问题描述
我正在尝试编写一个 glob 模式,它返回一个不以 2 个可能的后缀之一结尾的文件列表:完成和每月
我的测试目录中的文件列表是:
foo.done
foo.montly
foo.pdf
foo.txt
如果我只对 1 个后缀执行否定,我会非常成功:
ls !(*done) or ls !(*monthly)
但是,当我尝试这样的事情时:
ls !({*monthly,*done})
我明白了:
foo.done
foo.monthly
foo.pdf
foo.pdf
foo.txt
foo.txt
有人可以帮助我理解一个结果,它不仅不会产生我想要的否定结果,而且还会列出重复项!
解决方案
用于|
分隔模式列表 ( docs ) 中的模式:
如果使用内置 shopt 启用了 extglob shell 选项,则可以识别多个扩展模式匹配运算符。在下面的描述中,模式列表是一个或多个由“|”分隔的模式的列表。
结果:
$ shopt -s extglob
$ ls
foo.done foo.monthly foo.pdf foo.txt
$ ls *.!(monthly|done)
foo.pdf foo.txt
推荐阅读
- excel - 如何在不跳过列的情况下从合并单元格复制和粘贴公式
- python - 如何使我的矩形与旋转精灵一起旋转
- node.js - Giphy API 总是提供相同的 gif (discord.js)
- react-native - 我已经在 play 和 apple store 上发布了一个 expo 应用程序。在这种情况下,如何使用 OTA 无线更新?
- ios - 无法使用 React Native WebView 在 iOS 中单击和拨打电话号码
- reactjs - react-final-form formState 条件渲染中的问题
- amazon-web-services - 限制对 aws s3 中文档的访问以保护访问用户免受其他租户访问它的最佳方法是什么
- tensorflow - 如何从索引值中获取值
- java - 格式化Alluxio:没有在文件系统工厂下找到:hdfs://nameservice1/alluxio/journal/BlockMaster
- java - 从 IntelliJ IDEA 中的 gradle 项目运行单元测试时,如何仅显示类名?