如何加载 10 个以上具有可执行参数范围的文件?

如何加载 10 个以上具有可执行参数范围的文件?

我有这个有效的命令行表达式:

program --files path_to_mydir/mydata_[0-9].csv

我想离开,[0-100]但这不起作用。

program --files path_to_mydir/mydata_[0-100].csv

另外,还有一个问题,你怎么称呼[0-10]wrt shell 脚本和 bash 脚本?

谢谢

编辑:虽然类似,但这个问题并未询问ls

答案1

[...]是一个括号表达式。它始终匹配单个字符,因此您不能使用它,[0-100]因为它只匹配单个01(在 POSIX 语言环境中)

zshshell 中,您可以使用<0-100>数字范围通配模式,但这在以下情况下不起作用bash

program --files path_to_mydir/mydata_<0-100>.csv

bash,你可以使用大括号扩展代替:

program --files path_to_mydir/mydata_{0..100}.csv

但您必须意识到这与文件名通配模式之间的区别。大括号扩展,如上面的扩展,生成字符串,无论什么文件名可用,而文件名通配模式匹配现有名称。这意味着大括号扩展可能会提供不存在的程序文件名。

可以用于[...]匹配具有 0 到 100 之间数字的文件,但您必须将其设置为三种模式,每种模式对应一个数字长度:

shopt -s nullglob

program --files \
    path_to_mydir/mydata_[0-9].csv \
    path_to_mydir/mydata_[1-9][0-9].csv \
    path_to_mydir/mydata_[1][0][0].csv

第一个将匹配包含数字0到 的名称,第二个将匹配包含到 的9名称,最后一个将匹配包含 的名称。1099100

您想要匹配零填充的整数吗:

shopt -s nullglob

program --files \
    path_to_mydir/mydata_[0][0-9][0-9].csv \
    path_to_mydir/mydata_[1][0][0].csv

nullglob在此代码的两个变体中设置了 shell 选项,以确保删除任何与任何名称不匹配的模式,并且不会留下未展开的情况。


用户 fra-san 注意到,您可以将上面的大括号扩展与强制 shell 触发通配模式匹配的内容结合使用:

shopt -s nullglob
program --files path_to_mydir/[m]ydata_{0..100}.csv

[m]在字符串中包含(与字符 匹配的模式m)将强制 shell 将大括号扩展创建的每个字符串视为单独的通配模式。由于我们使用的是nullglob,因此与现有名称不对应的模式将从参数列表中删除。

请注意,这将生成并扩展 101 个通配模式,而本答案中使用通配的其他方法则使用两个或三个模式。

答案2

glob运算[...]符与类似的正则表达式运算符一样,匹配指定集中的字符(或可能的整理元素)。

它只匹配一个字符。里面[...],你可以有

  • 单个字符,例如[abc]匹配aorbc
  • 字符类,例如[[:digit:]]匹配isdigit()返回 true 的字符。
  • 范围类似于在和[a-f]之间排序的字符(或排序元素)(请注意,它可能并且通常包含的不仅仅是例如落在该范围内的东西)。afabcdefé
  • 更深奥的,比如[[=e=]]等效类、[[.x.]]按名称给出的整理元素......

您可以将所有这些结合起来。例如,[[:blank:][:digit:]a-f123]who 会匹配空白、数字、a 和 f 之间的字符或者 1、2 或 3。

[0-100]匹配的字符在 0 和 1 或 0 或 0 之间排序,因此其中之一01٠۰߀०০੦૦୦௦౦౸೦൦෦๐໐༠༳၀႐០៰᠐᥆᧐᪀᪐᭐᮰᱀᱐⁰₀↉⓪⓿〇㍘꘠꣐꤀꧐꧰꩐꯰0

相关内容