我希望匹配目录中的所有文件名,如下所示:
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?。
答案 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