您好我正在尝试处理扩展名为 .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'
为什么?
答案 0 :(得分:1)
更简单的方法是使用find
:
find . -name "*.p8" -o -name "*.p16" -o -name "*.p32
-o
相当于布尔OR
要将其分配给变量,请执行以下操作:
myvar=$(find . -name "*.p8" -o -name "*.p16" -o -name "*.p32")
答案 1 :(得分:1)
几个可能的问题。如果要执行与bash中尝试的匹配的正则表达式文件匹配,则必须启用extglob
。所以把
shopt -s extglob
在你的for循环之前。如果你想在bash中使用posix字符类,你也在寻找[[:digit:]]
。所以把它放在一起,试试
shopt -s extglob
for f in ".p"+([[:digit:]]); do
不引用确定“$ pack_list”是如何用上面的“.p”替换它。
答案 2 :(得分:0)
现在正在运行,有点改变BroSlow的答案:
for f in "$pack_list+([[:digit:]])"; do