使用`seq`的Bash通配符模式

dee*_*pak 3 bash shell

我正在尝试以下命令:

ls myfile.h1.{`seq -s ',' 3501 3511`}*
Run Code Online (Sandbox Code Playgroud)

ls提出错误:

ls: cannot access myfile.h1.{3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511}*: No such file or directory
Run Code Online (Sandbox Code Playgroud)

似乎ls认为整行是文件名而不是通配符模式.但是,如果我只是ls myfile.h1.{3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511}*在终端中复制该命令,我会按预期获得列表.

为什么要在完整的工作中键入命令,而不是使用seq

kar*_*kfa 5

seq 你的情况不需要,试试

$ ls myfile.h1.{3500..3511}
Run Code Online (Sandbox Code Playgroud)

如果你想使用seq我建议使用格式选项

$ ls $(seq -f 'myfile.h1.%g' 3501 3511)
Run Code Online (Sandbox Code Playgroud)

但我认为没有任何理由这样做.

更新: 请注意,我没有注意到原帖中的字符串.有了这个,支撑延伸仍然是首选方式

$ ls myfile.h1.{3500..3511}*
Run Code Online (Sandbox Code Playgroud)

如果你的bash支持零填充,甚至可能将公共数字分解出去

$ ls myfile.h1.35{00..11}*
Run Code Online (Sandbox Code Playgroud)

如果没有,你可以提取至少3

$ ls myfile.h1.3{500..511}*
Run Code Online (Sandbox Code Playgroud)

请注意,seq替代方法不适用于globbing.

其他答案有更多细节......