355 votes

Comment puis-je répéter un personnage en bash?

Comment pourrais-je faire cela avec echo ?

 perl -E 'say "=" x 100'
 

563voto

dogbane Points 85749

Vous pouvez utiliser:

 printf '=%.0s' {1..100}
 

Comment ça marche:

Bash se développe {1..100} pour que la commande devienne:

 printf '=%.0s' 1 2 3 4 ... 100
 

J'ai défini le format de printf sur =%.0s ce qui signifie qu'il imprimera toujours un seul = quel que soit l'argument donné. Par conséquent, il imprime 100 = s.

64voto

eugene y Points 37378

Il y a plus d'une façon de le faire.

En utilisant une boucle:

 for i in {1..100}; do echo -n =; done
 

Utilisation de printf :

 printf '=%.s' {1..100}
 

Utilisation de head et tr :

 head -c 100 < /dev/zero | tr '\0' '='
 

38voto

Sam Salisbury Points 438

J'ai juste trouvé un sérieux moyen facile de faire cela en utilisant suivants:

Mise à JOUR: Cela fonctionne sur le BSD seq qui vient avec OS X. YMMV avec d'autres versions

$ seq  -f "#" -s '' 10

Imprime '#' 10 fois, comme ceci:

##########
  • -f "#" définit le format de chaîne de caractères à ignorer les chiffres et il suffit d'imprimer # pour chacun.
  • -s '' définit le séparateur à une chaîne vide pour supprimer les retours à la ligne qui seq insère entre chaque numéro
  • Les espaces après -f et -s semble être important.

EDIT: Ici c'est une fonction très pratique...

repeat () {
    seq  -f $1 -s '' $2; echo
}

Qui vous pouvez l'appeler comme ça...

$ repeat "#" 10

REMARQUE: Si vous êtes extensible # puis les guillemets sont importants!

18voto

Tim Points 7281

Il n'y a pas de moyen simple. Évitez les boucles utilisant printf et la substitution.

 str=$(printf "%40s")
echo ${str// /rep}
# echoes "rep" 40 times.
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X