生成要传递给程序的参数序列?

gra*_*olf 8 bash

我目前正在使用大括号和通配符的组合来一次在 vlc 中播放多个文件:

vlc K20-{06,07,08,09,10,11,12,13,14,15,16,17}*
Run Code Online (Sandbox Code Playgroud)

但是数字总是完整的序列,有没有办法以某种方式更简单地指定它,也许像

vlc K20-{06-17}*
Run Code Online (Sandbox Code Playgroud)

? 也许seq以某种方式使用?

我可以用

   $ echo K20-{$(seq -s, -f "%02.0f" 06 17)}*
K20-{06,07,08,09,10,11,12,13,14,15,16,17}*
Run Code Online (Sandbox Code Playgroud)

但这似乎并没有扩大*. 有什么办法吗?

ste*_*eve 13

正如@steeldriver 所指出的,K20-{06..17}*涵盖了它。

示例,使用echofor 测试/验证:

$ echo vlc K20-{06,07,08,09,10,11,12,13,14,15,16,17}*
vlc K20-06* K20-07* K20-08* K20-09* K20-10* K20-11* K20-12* K20-13* K20-14* K20-15* K20-16* K20-17*
$ echo vlc K20-{06..17}*
vlc K20-06* K20-07* K20-08* K20-09* K20-10* K20-11* K20-12* K20-13* K20-14* K20-15* K20-16* K20-17*
Run Code Online (Sandbox Code Playgroud)

*会以及是否有匹配当前工作目录名的文件扩展。

所以vlc K20-{06..17}*会达到你想要的。

有关 bash 扩展的更多信息,请参阅GNU Bash 参考手册 - 支撑扩展。或从man bash,阅读:

序列表达式采用 {x..y[..incr]} 形式,其中 x 和 y 是整数或单个字符,而 incr 是一个可选增量,是一个整数。

所以:

$ echo K20-{06..10}
K20-06 K20-07 K20-08 K20-09 K20-10

$ echo K20-{06..10..2}
K20-06 K20-08 K20-10
Run Code Online (Sandbox Code Playgroud)