J'ai itérer sur les nombres dans divers ordre. Je peux les afficher par ordre croissant, même avec des étapes telles que:
$ seq --separator="," 1 10
1,2,3,4,5,6,7,8,9,10
$ seq --separator="," 1 2 10
1,3,5,7,9
Je suis également capable de les afficher dans l'ordre inverse, ni continu ni par étapes.
$ seq --separator="," 10 1
$ seq --separator="," 10 2 1
Aucune sortie pour les commandes ci-dessus.
Les détails de ma coquille:
$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
Dites-moi comment je pourrais afficher les nombres par ordre décroissant?
command-line
seq
mtk
la source
la source
seq
c’est un outil totalement non standard et il n’ya aucune garantie que deux implémentations soient identiques. Si vous devez écrire une boucle qui parcourt les nombres en bash, utilisez-lafor ((i=$max;i>=0;i--)) …
ou similaire.Réponses:
utiliser l'incrément négatif
la source
En général, vous ne voulez pas utiliser
seq
, ce n'est pas portable (même parmi les environnements Linux standard). Si vous utilisez ksh, zsh ou bash4 +, vous pouvez utiliser le développement d'accolade:la source
seq
n'est pas standard et que vous utilisez ensuite une extension bash-4-only. ;)seq
n’est pas le cas.Une autre manière de pure bash, ksh ou zsh:
Un pur style POSIX:
la source
for
La deuxième expression devrait être le test et la troisième le pas.Maintenant, les standards POSIX:
(intéressant, avec
mawk
(et dans une moindre mesuregawk
aussi) beaucoup plus rapide que GNUseq
pouri = 10000000
au lieu dei = 10
)Ou
(ne serait que plus efficace avec un petit nombre d'itérations, en particulier avec
bash
)Ou
(qui prend en charge des nombres de toute taille, mais notez qu’au-delà d’un certain nombre de chiffres (nombres supérieurs à 10 70 au moins dans les paramètres régionaux POSIX), les lignes sont entourées de barres obliques inverses)
la source
BC_LINE_LENGTH=0
l'environnement. Pas de chance sur d'autres implémentations.s=$s,$i
ou d'appelerecho -n
/echo \c
/printf
?Vous pouvez inverser l'ordre en utilisant
tac
(chat en sens inverse). Même siseq
devrait se comporter différemment sur différents systèmes, je pense que les éléments suivants devraient être aussi portables que possible:la source
Essayez avec:
Exemple:
$ seq 10 -1 1
la source