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

标签 bash shell

我正在尝试以下命令:

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/

相关文章:

shell - 在 shell 脚本中调用的脚本文件中调用主脚本函数

bash:PROMPT_COMMAND 不执行多个命令,单个命令有效

bash - Bash Shell 的新应用程序

linux - SSH 持久连接超时

递归遍历文件的shell脚本

python - Windows 上 Python (v3.0) 中的环境变量

java - 使用 ProcessBuilder 停止从 Java 扫描树莓派中的 BLE 加密狗

linux - 循环回显显示多个变量的 'live update'

Bash:将 ping 对 SIGQUIT 的中间统计信息捕获到变量

bash - 如何在 bash shell 中将一个字符串拆分为至少由一个空格分隔的多个字符串?