bash:尝试获取具有特定扩展名的所有文件

bash:尝试获取具有特定扩展名的所有文件,bash,pattern-matching,Bash,Pattern Matching,嗨,我正在尝试处理扩展名为.p8、.p16、*.p32的文件 ./pack_vectors $@ for var in "$@" do if [ -f $var ]; then pack_list="${var/.dat/.p}" echo $pack_list # below line doesn't work for f in $pack_list+([:digit:]);do 我要说的是: ./wrapper.sh: line 10: syntax error near unexpect

嗨,我正在尝试处理扩展名为.p8、.p16、*.p32的文件

./pack_vectors $@
for var in "$@"
do
if [ -f $var ];
then
pack_list="${var/.dat/.p}"
echo $pack_list
# below line doesn't work
for f in $pack_list+([:digit:]);do
我要说的是:

./wrapper.sh: line 10: syntax error near unexpected token `('
 ./wrapper.sh: line 10: `for f in $pack_list+([:digit:]);do'

为什么?

一种更简单的方法是使用
查找

find-名称“*.p8”-o-名称“*.p16”-o-名称“*.p32

-o
相当于布尔值

要将其分配给变量,请执行以下操作:


myvar=$(find.-name“*.p8”-o-name“*.p16”-o-name“*.p32”)

两个可能的问题。如果要在中进行正则表达式样式的文件匹配,必须启用
extglob
。因此,请将

在for循环之前。如果要在中使用posix字符类,还需要查找
[[:digit:][]
。因此,如果要将它们组合在一起,请尝试

shopt -s extglob
for f in ".p"+([[:digit:]]); do

不确定什么是“$pack_list”,因此将其替换为上面的“.p”。

它现在正在工作,回答有点变化:

for f in "$pack_list+([[:digit:]])"; do

对于$pack_list+([[:digit:])中的f,do get me:./wrapper.sh:第9行:意外标记附近的语法错误
('./wrapper.sh:第9行:
对于$pack_list+([:digit:]);do'@user3306484什么是
$pack_list
?它现在是这样工作的:“$pack_list+([:digit:])中的f)"; do@user3306484可能存在一些分词问题。如果不希望对其执行分词,则需要在bash“$pack_list”中引用变量。其余变量可以不加引号。请尝试ls*.p[0-9]*
for f in "$pack_list+([[:digit:]])"; do