当我使用以下内容时,我得到了预期的结果:
$ echo {8..10}
8 9 10
如何以简单的方式使用这个大括号扩展来获得以下输出?
$ echo {8..10}
08 09 10
我现在认为这可以使用seq
(没有尝试)获得,但这不是我想要的。
有用的信息可能是我仅限于这个 bash 版本。 (如果你有zsh
解决方案,但没有bash
解决方案,也请分享)
$ bash -version
GNU bash, version 3.2.51(1)-release (x86_64-suse-linux-gnu)
答案1
在第一个数字前面加上 a 前缀,以0
强制每个项具有相同的宽度。
$ echo {08..10}
08 09 10
来自 bash 手册页有关大括号扩展的部分:
提供的整数可以以 0 为前缀,以强制每个项具有相同的宽度。当 x 或 y 以零开头时,shell 会尝试强制所有生成的项包含相同数量的数字,并在必要时进行零填充。
另请注意,您可以使用seq
通过-w
用前导零填充来均衡宽度的选项:
$ seq -w 8 10
08
09
10
$ seq -s " " -w 8 10
08 09 10
如果您想要更多控制,您甚至可以指定 printf 样式格式:
$ seq -s " " -f %02g 8 10
08 09 10
答案2
我有与原始海报 ( GNU bash, version 3.2.51(1)-release
) 相同的 bash 版本,但{08..12}
对我不起作用,但以下内容有效:
for i in 0{8..9} {10..12}; do echo $i; done
08
09
10
11
12
这有点乏味,但它确实适用于 bash 的 OP 版本(我认为是更高版本)。
答案3
如果你使用 printf
printf "%.2d " {8..10}
这将强制为 2 个字符,并添加前导 0。如果您需要 3 个数字,您可以更改为“%.3d”。
答案4
作为参考,我认为自动固定宽度仅出现在最新版本的 bash 中:
$ bash -version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
$ echo test{00..05}
test0 test1 test2 test3 test4 test5