Globbing:将文件名与脚本中的数字匹配?

时间:2016-02-16 15:46:23

标签: bash shell glob

我希望匹配目录中的所有文件名,如下所示:

h1.txt, h2.txt, h12.txt, h3.txt

假设目录为test/。我有一个名为test.sh的脚本,其中包含以下内容:

p=test/h
echo $p+([[:digit:]]).txt

但这会出错:

  

./ test.sh:line 2:意外令牌附近的语法错误'('。/ test.sh:

     

第2行:'echo $ p +([[:digit:]])。txt'

有人可以解释这里发生了什么吗?这在控制台中工作正常,请参阅Bash bracket expansion: How to match all files names with a number?

2 个答案:

答案 0 :(得分:3)

您只需启用extglob即可使该表达式工作:

shopt -s extglob

p='test/h'
echo "$p"+([[:digit:]]).txt

<强>输出:

test/h1.txt test/h12.txt test/h2.txt test/h3.txt

答案 1 :(得分:1)

我建议使用find

find test -type f -regex '.*h[0-9]+.txt'

原创(过时)答案:

使用范围可能适合您:

echo test/h{1..99}.txt