首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >鱼壳中的Glob匹配(通配符)与bash行为不匹配

鱼壳中的Glob匹配(通配符)与bash行为不匹配
EN

Stack Overflow用户
提问于 2015-03-03 17:58:37
回答 5查看 7.8K关注 0票数 7

当我在bash中执行以下命令时,我会得到与我想要的正则表达式匹配的文件列表:

代码语言:javascript
运行
复制
$> ls *-[0-9].jtl
benchmark-1422478133-1.jtl  benchmark-1422502883-4.jtl  benchmark-1422915207-2.jtl

但是,当我在fish shell中运行相同的命令时,会得到不同的结果:

代码语言:javascript
运行
复制
$> ls *-[0-9].jtl
fish: No matches for wildcard '*-[0-9].jtl'.
ls *-[0-9].jtl
   ^

怎么会这样?

EN

回答 5

Stack Overflow用户

发布于 2015-03-03 18:05:36

Fish的文档并不声称支持POSIX全球模式的全部力量。

引用文档的话:

通配符 如果星星(*)或问号(?)在该参数中,fish试图将给定参数与任何文件匹配,其方式如下:

  • ?可以匹配除/以外的任何单个字符。
  • *可以匹配任何不包含/的字符串。这包括匹配空字符串。
  • **匹配任何字符串。这包括匹配空字符串。该字符串可能包含/字符,但不需要。

值得注意的是,没有提到字符类,因为fish不支持它们。

如果您希望全局保证支持所有POSIX (fnmatch)功能,请使用符合POSIX的或POSIX-超集shell。

票数 8
EN

Stack Overflow用户

发布于 2018-11-21 06:45:24

您还可以使用更多的扩展工具unix find。它非常强大。

示例:使用正则表达式

代码语言:javascript
运行
复制
find . -path '.*-[0-9].jtl' -not -path '.*-32.jtl'
票数 4
EN

Stack Overflow用户

发布于 2021-03-05 23:06:38

这是一个较旧的帖子,但我认为值得重温一下。在编写本报告时(2021年3月),文档确实明确声明支持通配符。

鱼支持熟悉的通配符*。列出所有JPEG文件:*.jpg lena.jpg meena.jpg圣诞老人maria.jpg 您可以包含多个通配符: ls l*.p* lena.png lesson.pdf 特别强大的是递归通配符**,它递归地搜索目录: ls /var/**.log /var/log/system.log /var/run/sntp.log

然而,我仍然经常遇到同样的问题。

代码语言:javascript
运行
复制
[/home/glass ]
><glass@rockpiX-Ubuntu> rm *.log.old
fish: No matches for wildcard “*.log.old”. See `help expand`.
rm *.log.old
   ^
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28838665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档