Создание диапазона чисел от 08 до 10 в bash не включает 0 перед однозначными числами

Это не будет делать то, что вы хотите, если в именах ваших файлов есть специальные символы:

$ touch 'name
with newline' 'other name\nwith newline'
$ echo * | xargs -n1 echo
name
with
newline
other
name
with
newline

Если вы просто хотите перечислить файлы, ls -1. В противном случае используйте find с флагом -exec.

0
07.04.2017, 12:23
3 ответа

Вероятно, что 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

также будет работать.

3
28.01.2020, 02:15

альтернатива, вы можете использовать команду seq

$ seq -f "%02g" 8 10
08
09
10
1
28.01.2020, 02:15

Вместо использования bash вы можете использовать zsh, откуда взялся этот синтаксис.

zsh поддерживает {08..10} с 1995 года (представлено в версии 2.6-beta4), поэтому будет доступен в zsh любой версии CentOS. (первый выпуск CentOS в 2004 г.).

На самом деле вы использовали синтаксис zsh в своем примере, так как в bash вам нужно echo "${i}" вместо echo ${ i} для того, чтобы расширение $i не подвергалось разбиению на слова (и, таким образом, зависело от $IFS).

2
28.01.2020, 02:15

Теги

Похожие вопросы