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

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

我目前正在使用大括号和 globing 的组合来同时播放 vlc 中的多个文件:

vlc K20-{06,07,08,09,10,11,12,13,14,15,16,17}*

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

vlc K20-{06-17}*

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

我可以用

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

但这似乎并没有扩大*。有办法解决吗?

答案1

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

例如,使用echo用于测试/验证:

$ 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*

*如果当前工作目录中存在与名称匹配的文件,也会扩展。

这样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

相关内容