Bonjour,
Pour une raison inavouable j'avais besoin de dupliquer n fois un paramètre sur une ligne de commande :
commande foo foo foo foo foo foo ... (n fois)
La solution que j'ai trouvé c'est : par exemple pour n = 30
commande foo{,,}{,,,,,}{,,,}
# (2*5*3)
Est-ce qu'il y a plus simple ? Plus joli ? En bash ? En shell ?
Bien à vous
AJOUT : Je faisais le malin avec ma solution, je me suis planté de 1 sur chacun des facteurs… c'est :
command foo{,}{,,}{,,,,}
# Perl (ou autre)
Posté par Sytoka Modon (site web personnel) . Évalué à 3.
[^] # Re: Perl (ou autres)
Posté par Benoît Sibaud (site web personnel) . Évalué à 7. Dernière modification le 07 février 2017 à 13:22.
Une boucle classique en shell :
Une boucle classique en awk :
Une approche plus tordue :
Une autre version avec séparation par des espaces :
nb: une simple recherche donne toutes ses solutions en première page des résultats
[^] # Re: Perl (ou autres)
Posté par pulkomandy (site web personnel, Mastodon) . Évalué à 6.
Qu'il faut quand même passer en arguments à la commande initiale pour complètement répondre à la question:
for i in $(seq 1 100) ; do printf "coin " ; done |xargs commande
[^] # Re: Perl (ou autres)
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 6.
Sans pipe ni recourcs à xargs:
[^] # Re: Perl (ou autres)
Posté par sub0 . Évalué à 3.
Intéressant !
Avec une substitution en moins et sans seq (dont on peut se passer facilement dans ce cas) :
commande $(for i in {1..100} ; do printf 'arg '; done)
[^] # Re: Perl (ou autres)
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 4.
Attention, c'est du Bash, ou du Zsh, mais plus du simple shell POSIX.
[^] # Re: Perl (ou autres)
Posté par sub0 . Évalué à 2.
(en effet, passe pas sur le shell ash de mon routeur).
La question portait bien sur du bash (
{,,,}
) et demandait explicitement « en bash ? » ;)Au passage, j'me posais la question :
- seq n'est-il pas "non-standard", apporté par coreutils, donc non présent sur tous les systèmes ? (vraiment ?)
- $() est compatible POSIX, mais seq ? Tout coreutils est-il POSIX ?
Tout ça n’est pas complément clair pour moi, et ce que je trouve reste un peu flou. Si t'as un truc éclairant à pointer !
Et en posix shell, sans seq, c'est possible ?
[^] # Re: Perl (ou autres)
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 4.
Les mieux est encore de consulter la norme POSIX. Et effectivement, seq ne fait pas partie des utilitaires standard… Je ne sais pas comment faire ça sans.
[^] # Re: Perl (ou autres)
Posté par foobarbazz . Évalué à 2.
Oui, j'avais bien trouvé tout ça. Mais pour le coup, je préfère la mienne :-)
# On en apprend tous les jours !
Posté par ComputingFroggy (site web personnel) . Évalué à 2.
Et dire que je croyais connaître le shell.
C'est quoi qui fait répéter en utilisant les accolades ? Quelle est l'instruction ?
Est-ce que quelqu'un peut m'orienter vers une doc qui décrit ceci ?
C'est difficile à trouver avec un moteur de recherche (enfin, je n'ai pas trouvé la bonne recherche)
[^] # Re: On en apprend tous les jours !
Posté par sub0 . Évalué à 3. Dernière modification le 08 février 2017 à 09:42.
La meilleure source sur bash (avec
man bash
et BashFAQ :http://wiki.bash-hackers.org/syntax/expansion/brace
[^] # Re: On en apprend tous les jours !
Posté par frayd . Évalué à 3.
man bash
rechercher "Brace Expansion" (ou "Expansion des accolades" si version française).
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.