
在我運行 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 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 中引入),因此可以在zsh
任何版本的 CentOS 中使用(2004 年首次發布 CentOS)。
您實際上zsh
在範例中使用了語法,就像bash
您需要的那樣echo "${i}"
,而不是echo ${i}
為了擴展$i
不受到分詞(因此依賴$IFS
)。
答案3
或者,您可以使用seq
命令
$ seq -f "%02g" 8 10
08
09
10