在 bash 中創建從 08 到 10 的數字範圍不包括一位數字前面的 0

在 bash 中創建從 08 到 10 的數字範圍不包括一位數字前面的 0

在我運行 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

相關內容