У меня есть перебора чисел в различном порядке. Я могу отображать их в возрастающем порядке, даже с такими шагами, как:
$ seq --separator="," 1 10
1,2,3,4,5,6,7,8,9,10
$ seq --separator="," 1 2 10
1,3,5,7,9
Я также могу отображать их в обратном порядке, ни непрерывно, ни пошагово.
$ seq --separator="," 10 1
$ seq --separator="," 10 2 1
Нет вывода для вышеуказанных команд.
Мои детали оболочки:
$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
Дайте мне знать, как я смогу отображать числа в порядке убывания?
command-line
seq
холодный морской тропический воздух
источник
источник
seq
это совершенно нестандартный инструмент, и нет никаких гарантий, что любые две реализации будут одинаковыми. Если вам нужно написать цикл, который повторяется в обратном порядке по числам в bash, используйтеfor ((i=$max;i>=0;i--)) …
или тому подобное.Ответы:
использовать отрицательное приращение
источник
В общем, вы не хотите использовать
seq
, это не переносимо (даже среди стандартных сред Linux). Если вы используете ksh, zsh или bash4 +, вы можете использовать скобки:источник
seq
нестандартность, а затем используете расширение скобки только для bash-4. ;)seq
нет.Другой способ в чистом bash, ksh или zsh:
Чистый способ POSIX:
источник
for
Второе выражение должно быть тестом, а третье - шагом.Теперь стандартные POSIX:
(интересно, с
mawk
(и в меньшей степениgawk
также) намного быстрее, чемseq
для GNUi = 10000000
вместоi = 10
)Или
(будет эффективнее только с небольшим количеством итераций, особенно с
bash
)Или
(который поддерживал бы числа любого размера, но учтите, что после определенного количества цифр ( по крайней мере, чисел, превышающих 10 70 в локали POSIX), строки будут заключены в обратную косую черту)
источник
BC_LINE_LENGTH=0
в среде. Нет такой удачи на других реализациях.s=$s,$i
или вызыватьecho -n
/echo \c
/printf
?Вы можете отменить заказ, используя
tac
(кошка в обратном порядке). Даже еслиseq
в разных системах они должны вести себя по-разному, я думаю, что следующее должно быть максимально переносимым:источник
Попробуйте с:
Пример:
$ seq 10 -1 1
источник