首页 > 解决方案 > 如何使用变量和星号打印正则表达式匹配列表

问题描述

我有这个文件列表:

perspectium-02-16-2019-1.log.gz  perspectium-07-27-2019-3.log.gz  perspectium-10-18-2019-1.log.gz
perspectium-07-27-2019-1.log.gz  perspectium-10-16-2019-1.log.gz  perspectium-10-18-2019-2.log.gz
perspectium-07-27-2019-2.log.gz  perspectium-10-17-2019-1.log.gz  perspectium-10-18-2019-3.log.gz

我计算了一个日期:

d=$(date -d '-1 day' '+%m-%d-%Y') 

我想删除那些符合条件的文件:

perspectium-$d-*.log.gz

但是,如果我对此进行回显,它将逐字打印星号,因此它不会匹配任何文件:

perspectium-10-17-2019-*.log.gz

你能给我一些线索吗?谢谢指教。

标签: bashglob

解决方案


您可以使用以下内容:

output=`ls perspectium-$d-*.log.gz`
echo $output

或者

for file in perspectium-$d-*.log.gz
do
echo $file
done;

或者只是不带引号:

echo perspectium-$d-*.log.gz

但如前所述,请注意匹配不正确的可能问题。

这是您的情况的输出:

[root@pro-sip tmp]# d=10-18-2019
[root@pro-sip tmp]# ls perspectium-$d-*.log.gz
perspectium-10-18-2019-1.log.gz  perspectium-10-18-2019-2.log.gz
[root@pro-sip tmp]# for i in  perspectium-$d-*.log.gz  
> do
> echo $i
> done;
perspectium-10-18-2019-1.log.gz
perspectium-10-18-2019-2.log.gz
[root@pro-sip tmp]# echo perspectium-$d-*.log.gz
perspectium-10-18-2019-1.log.gz perspectium-10-18-2019-2.log.gz

推荐阅读