
На моей локальной машине, где я запускаю 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? Это из-за версии bash или просто конфигурации среды? Могу ли я изменить это на сеанс или навсегда, чтобы мой сервер ставил этот ноль перед числами меньше 10?
решение1
Вероятно, bash
на вашем компьютере с CentOS 5.6 установлена версия 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
поддерживается {08..10}
с 1995 года (представлен в версии 2.6-beta4), поэтому будет доступен в zsh
любой версии CentOS (первый выпуск CentOS в 2004 году).
На самом деле вы использовали zsh
синтаксис в своем примере, как в bash
вам нужно echo "${i}"
вместо echo ${i}
для того, чтобы расширение $i
не подвергалось разбиению на слова (и поэтому зависело от $IFS
).
решение3
альтернативно, вы можете использовать seq
команду
$ seq -f "%02g" 8 10
08
09
10