在我运行 CentOS 7.2 的本地计算机上,当我执行以下操作时:
for i in {8..12}; do echo ${i}; done
我有:
8
9
10
但是当我这样做时:
for i in {08..10}; do echo ${i}; done
我有:
08
09
10
但在我有权访问的运行 CentOS 5.6 的服务器上,运行这两个命令会产生相同的输出:
8
9
10
为什么8和9前面没有0?是因为bash版本的原因,还是只是环境配置的原因?我可以在每个会话中更改它还是永久更改它,以便我的服务器会将零放在小于 10 的数字前面?
答案1
您的 CentOS 5.6 机器上的很可能bash
是版本 3。大括号扩展中的整数零填充是在 的版本 4 中引入的bash
。
解决方案是将您的安装更新bash
到更新版本,或者使用生成零填充整数的替代方法,例如
printf '%02d\n' {8..10}
或者,类似的东西
for i in 0{1..9} {10..20}; do
echo "$i"
done
也会起作用。
答案2
bash
您可以使用zsh
该语法的来源,而不是使用。
zsh
自 1995 年以来一直支持{08..10}
(在 2.6-beta4 中引入),因此将在任何版本的 CentOS 中可用zsh
(2004 年 CentOS 的第一个版本)。
您实际上zsh
在示例中使用了语法,就像bash
您需要的那样echo "${i}"
,而不是echo ${i}
为了扩展$i
不受到分词(因此依赖于$IFS
)。
答案3
或者,您可以使用seq
命令
$ seq -f "%02g" 8 10
08
09
10