我在UNIX Shell中有以下命令,用于列出当前目录中带有后缀模式1到9的文件
ls cat[1-9]
输出 cat1 cat2 cat3 cat4 cat5 cat6 cat7 cat8 cat9
但是当我尝试使用以下命令时,我得到了意想不到的结果
ls cat[1-10]
输出 的 CAT1
相反,我应该将cat1发送到cat10所有文件
答案 0 :(得分:5)
您可以使用list glob
:
ls cat{1..9}
排除cat7
:
使用:
ls cat{{1..6},{8,9}}
或者其他:
ls cat[^7]
答案 1 :(得分:0)
你的glob表达式匹配一个字符列表,而不是数字。 cat[1-10]
将匹配名为'cat1'(cat1到cat1)和'cat0'的文件,就是这样。您可以使用大括号扩展cat{1..10}
,但这将扩展此类文件是否确实存在,因此您最终可能会在脚本中找到文件未找到错误。唯一可以确定的方法是直接过滤列表:
cats=()
for cat in cat[0-9]*; do
if [[ ${cat#cat} ^= *[^0-9]* ]]; then # if the part after "cat" is numeric
cats+=("$cat")
fi
done