生成参数序列以传递给程序?


8

我目前正在使用大括号和gloglo的组合来一次在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}*

但这似乎并没有扩大*。可以解决吗?


7
大括号扩展范围的语法是{m..n}-因此K20-{06..17}*
-steeldriver

Answers:


13

就像@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}*将实现您想要的。

有关Gash扩展的更多信息,请参见GNU Bash参考手册-Brace扩展。或从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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.