ls 包含文件的范围名称

ls 包含文件的范围名称

我有一些以数字为文件名的文件。

10asdfsfl.txt
11sdfkf.txt
20sdfdf.txt
22sdfdf.txt
30saadf.txt
40asdfdf.txt
51sadfsf.txt
62ddgfg.txt

如果我用

ls -l [40-50]*

它返回文件列表

10asdfsfl.txt
11sdfkf.txt
20sdfdf.txt
22sdfdf.txt
30saadf.txt
40asdfdf.txt
51sadfsf.txt

虽然我的期望它应该返回列表

40asdfdf.txt

有什么建议我怎样才能用这个范围文件名得到我想要的结果?

谢谢。

答案1

[]不适用于数字范围 - 它仅适用于单字符范围(例如 az)。因此,您的[40-50]被解释为“字符40-50”,匹配所有文件,其第一的名称的字符在范围内。

数字范围没有直接等效项,但{}可用于生成一系列通配符(其中一些将不匹配任何内容,因此您可能希望同时使用“nullglob”选项),例如{40..50}*将扩展为40* 41* ... 50*

echo {40..50}xyz

echo {40..50}*

shopt -s nullglob
echo {40..50}*
shopt -u nullglob

如果这是 Bash 并且启用了“extglob”选项,您可以执行@(4[0-9]|50)*类似正则表达式的“4[0-9] 或 50”......尽管这并不比分别指定两个通配符好多少。

echo 4[0-9]* 50*

shopt -s extglob
echo @(4[0-9]|50)*

相关内容