如果我在具有静态值(即27..97
)的shell中运行此命令,它将正常工作并提供所需的输出
>ls -d $WORKDIR/batch/somefilename_{27..97}.* 2>/dev/null
somefilename_27.sometxt
somefilename_28.sometxt
somefilename_29.sometxt
..
somefilename_97.sometxt
但是如果我想包含变量或将参数传递给正则表达式,则会出现错误
ls: cannot access /home/work/batch/somefilename_{27..96}.*: No such file or directory
但是那不是真的,因为该文件存在,但是以某种方式使用正则表达式的变量不起作用。
>segStart="27"
>segEnd="96"
>myvar="$segStart..$segEnd"
>echo $segStart
27
>echo $segEnd
96
>echo $myvar
27..96
ls -d $WORKDIR/batch/somefilename_{$myvar}.*
"ls: cannot access /home/work/batch/somefilename_{27..96}.*: No such file or directory"
>array=($(ls -d $WORKDIR/batch/somefilename_$myvar.* 2>/dev/null))
>len=${#array[*]}
>echo $len
0
注意:我试图将名称在两个整数之间的目录名称存储在数组中:例如,有1-100个目录,名称为file_1.some
,file_2.some
,file_3.some
,…file_100.some
。
如果用户想从47到97获得目录,那么我想读取这些数字,进行存储,然后将其传递到ls
命令上方。
如果您还有其他替代方法也会有所帮助。
man bash
)>>ls
来获取数组中的文件列表:以下应该可以正常工作arr=(path{1..10}*)
或者,arr=(path*)
,然后您可以通过用[[
测试要去除的那些进行过滤。
您可以使用seq
命令来完成此操作: