我正在尝试以下命令:
ls myfile.h1.{`seq -s ',' 3501 3511`}*
但是 ls
引发错误:
ls: cannot access myfile.h1.{3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511}*: No such file or directory
似乎 ls
认为整行是文件名而不是通配符模式。但是,如果我只是在终端中复制该命令 ls myfile.h1.{3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511}*
我会得到列表正如预期的那样。
为什么输入命令完全有效,但使用 seq
却不行?
最佳答案
seq
你的情况不需要,试试
$ ls myfile.h1.{3500..3511}
如果你想使用seq
我会建议使用格式选项
$ ls $(seq -f 'myfile.h1.%g' 3501 3511)
但我认为没有任何理由这样做。
更新: 请注意,我没有注意到原始帖子中的通配符。有了这个,大括号扩展仍然是首选方式
$ ls myfile.h1.{3500..3511}*
如果你的 bash 支持零填充,甚至可以分解出公共(public)数字
$ ls myfile.h1.35{00..11}*
如果没有你至少可以提取 3
$ ls myfile.h1.3{500..511}*
请注意,seq
替代方案不适用于 globbing。
其他答案有更多细节...
关于使用 `seq` 的 Bash 通配符模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35592860/