为什么'ls * [[::: *]'有效,而'ls * [[::: *] _ [[:: **]'不起作用?

问题描述 投票:1回答:1

我修改了防火墙规则,并且ufw创建了更改文件的备份。我想确保我没有意外删除某些内容,因此运行了以下内容:

$ ls *[[:digit:]*]_[[:digit:]*]
ls: cannot access '*[[:digit:]*]_[[:digit:]*]': No such file or directory

我也尝试过

$ ls *_[[:digit:]*]
ls: cannot access '*_[[:digit:]*]': No such file or directory

这里的下划线有什么问题?

最后,以下工作。但是它将匹配任何以任意数字结尾的文件。

$ ls *[[:digit:]*]
after6.rules.20191223_104857  after.rules.20191223_104857  before6.rules.20191223_104857  
before.rules.20191223_104857  user6.rules.20191223_104857  user.rules.20191223_104857

如果有帮助,我的与全球相关的购物篮设置为

$ shopt | grep glob
dotglob         on
extglob         on
failglob        off
globasciiranges on
globstar        on
nocaseglob      on
nullglob        off
bash glob
1个回答
2
投票

您假设[[:digit:]*]表示“零个或多个数字”。这不是真的。它匹配一个数字或星号。

您打算使用的是extglob *([[:digit:]])

~/tmp $ ls **([[:digit:]])_*([[:digit:]])
after.rules.20191223_104857   before.rules.20191223_104857  user.rules.20191223_104857
after6.rules.20191223_104857  before6.rules.20191223_104857 user6.rules.20191223_104857

~/tmp $ ls *_*([[:digit:]])
after.rules.20191223_104857   before.rules.20191223_104857  user.rules.20191223_104857
after6.rules.20191223_104857  before6.rules.20191223_104857 user6.rules.20191223_104857
© www.soinside.com 2019 - 2024. All rights reserved.