J'apprends l'écriture de scripts shell à partir d'un manuel obsolète, et il me semble que ce serait vraiment utile d'avoir un programme qui retourne juste une chaîne de nombres délimités par des espaces quelque chose comme
$ range 10 20
10 11 12 13 14 15 16 17 18 19 20
Ensuite, si vous faites un script shell, vous pouvez avoir
for i in `range 10 20`; do some stuff with numbers in that range;done
une telle chose existe-t-elle ou dois-je l'écrire moi-même?
range
parseq
dans votre exemple. le séparateur par défaut est newline, pour avoir des espaces:seq -s " " 10 20
for
boucle - ou même toute commande générale qui divise les arguments - sauf si vous avez défini l'IFS différemment.seq
car il n'est pas spécifié par POSIX.Réponses:
seq
fait partie de coreutils.Sortie:
Si vous ne fournissez que 2 arguments à
seq
, l'incrément est de 1:la source
sed
a également de belles options comme-s
régler le séparateur ou-w
qualifier la largeur. Et vous pouvez fournir un incrément:seq -w -s ", " 0 5 20
résultats en 00, 05, 10, 15, 20 .seq
?seq 10 20
pourrait aussi être un exemple simple à ajouter;)Bash suffirait-il?
Vous pouvez faire beaucoup de choses avec l' expansion d'accolade . Bash 4 prend également en charge les plages rembourrées, par exemple
{01..20}
.Notez que Bash n'est pas considéré comme portable et n'est pas un utilitaire Unix standard. Bien que vous puissiez supposer en toute sécurité qu'il est installé sur la plupart des Linux modernes, ne l'utilisez pas dans un script que vous prévoyez d'exécuter sur toutes sortes de machines de type Unix.
la source
seq
. L'utilisation est comme dans votre exemple:seq -s " " 10 20
. Le-s
paramètre est nécessaire, car par défaut, les valeurs sont séparées par\n
.seq
s'agit d'un utilitaire GNU, et donc pas d'un "programme Unix standard"for i in {001..010}; ... ; done
et qu'il mettra le numéro à 3 chiffres.Si vous voulez quelque chose de strictement portable (c'est-à-dire qui ne dépend pas d'extensions bash spécifiques ou de commandes non spécifiées par POSIX)
la source
/dev/null
ou de< /dev/null
faire cela?If the awk program contains no actions and no patterns, but is otherwise a valid awk program, standard input and any file operands shall not be read and awk shall exit with a return status of zero.
Avant 10.7, il n'y en avait pas
seq
sur Mac OS X, maisjot
, en raison de l'héritage BSD.Exemple:
la source
Utilisez une
for
bouclela source
Vous pouvez utiliser
seq
, ou si vous ne l'avez pas, vous pouvez l'écrire vous-même:Usage:
Ou:
la source
Par souci d'exhaustivité, voici quelque chose qui fonctionnera avec certaines anciennes versions d'Unix (tant qu'elles auront perl installé). Pas vraiment élégant.
la source