#1 Le 15/12/2020, à 20:31
- cristobal78
Bash : commande simple pour répéter n fois un caractère donné
bonjour
Dans certains de mes scripts j'ai souvent été amené à créer une variable nommée "tiret"
tirets="-------------------------------"dont le but est de séparer des résultats acquis lors de l'exécution du script.
C'est laid et c'est lourd.
Donc j'ai cherché mais en vain une cde du genre :
commande (caractère ; nombre de répétition)Sur le forum j'ai retrouvé une proposition datant de 2014 de pingouinux jamais à court de solutions ! Merci à lui !! ![]()
J'en ai fait une fonction "repetcar" que je glisse parfois dans mes scripts :
repetcar() { for i in $(seq $nbr); do echo -n "$caract"; done ; echo ; }Ça marche très bien mais n'y aurait-il pas plus beau, un peu comme la cde simple que j'imagine plus haut ?
un fixe DELL, 1 laptop LDLC tous 2 sous 16.04LTS et 1 laptop Lenovo sous 18.04 LTS
Hors ligne
#2 Le 15/12/2020, à 20:50
- Watael

Re : Bash : commande simple pour répéter n fois un caractère donné
$ printf -v dixTirets -- '-%.s' {0..10}
$ echo "$dixTirets"
----------Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 15/12/2020, à 20:58
- pingouinux

Re : Bash : commande simple pour répéter n fois un caractère donné
Bonsoir,
Autre solution
$ caract=-; nbr=10
$ python -c "print('$caract'*$nbr)"
----------Hors ligne
#4 Le 15/12/2020, à 22:26
- Watael

Re : Bash : commande simple pour répéter n fois un caractère donné
tu veux pas compiler un code en C plutôt ? ![]()
->
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 15/12/2020, à 22:55
- LeoMajor
Re : Bash : commande simple pour répéter n fois un caractère donné
bonjour,
:~$ utfout "foo" -r 2 "-" -r 9 "\n" "\{\x20..\x7e}" "\n"
foofoofoo----------
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Hors ligne
#6 Le 16/12/2020, à 01:50
- cristobal78
Re : Bash : commande simple pour répéter n fois un caractère donné
bonsoir à tous
merci de vos réponses.
La Cde de watael est certes d'une grande concision mais je ne la comprends pas.
Après avoir cherché dans plusieurs manuels le fonctionnement de le Cde printf je n'en sais tjrs pas plus.
Quant au man de printf c'est quasi incompréhensible et comme tjrs sans un exemple. ![]()
La Cde de Pingouinux utilise python ce qui semble bien lourd pour un script, et d’ailleurs la petite "pique" de watael semble le confirmer ![]()
La Cde de Leomajor commence par utfout mais le man ne connaît pas : "Aucune entrée de manuel pour utfout" donc je ne la comprends pas non plus.
Par ailleurs sa ligne de Cde ne me parait pas plus simple que ma pauvre petite fonction.
Comme quoi ce que je croyais simple à résoudre ne semble pas l'être.
Merci en tout cas d'avoir essayé.
un fixe DELL, 1 laptop LDLC tous 2 sous 16.04LTS et 1 laptop Lenovo sous 18.04 LTS
Hors ligne
#7 Le 16/12/2020, à 02:34
- MicP
Re : Bash : commande simple pour répéter n fois un caractère donné
Bonjour
…Après avoir cherché dans plusieurs manuels le fonctionnement de le Cde printf je n'en sais tjrs pas plus.
Quant au man de printf c'est quasi incompréhensible et comme tjrs sans un exemple. …
Il s'agit de la fonction printf qui est intégrée (builtin) dans le shell bash
Pour faire s'afficher directement la page concernée,
tu peux lancer la ligne de commandes suivantes :
man -P "less -p 'printf \['" bash=======
Une page web (avec des exemples) concernant printf : https://wiki.bash-hackers.org/commands/builtin/printf
Dernière modification par MicP (Le 16/12/2020, à 02:41)
Hors ligne
#8 Le 16/12/2020, à 08:50
- pseudofab

Re : Bash : commande simple pour répéter n fois un caractère donné
tu veux pas compiler un code en C plutôt ?
->
La Cde de Pingouinux utilise python ce qui semble bien lourd pour un script, et d’ailleurs la petite "pique" de watael semble le confirmer ]
Bonjour,
Pourquoi ne pas utiliser un code python depuis bash? (ou l'inverse)
Que reprochez-vous à cette pratique?
# Là pour le plaisir de découvrir ...
# Envie d'apprendre Bash ou Python? Pensez aux MOOC ---> https://forum.ubuntu-fr.org/viewtopic.php?id=2030646
Hors ligne
#9 Le 16/12/2020, à 08:59
- Hizoka

Re : Bash : commande simple pour répéter n fois un caractère donné
@pseudofab
Attention aux doublons de post.
Pourquoi changer de langage alors que le 1er peut faire le travail ?
Ça alourdit le travail et ça le complique inutilement.
time for ((x=1; x < 1000; x++))
do
dixTirets=$(python3 -c "print('-'*10)")
done
real 0m19,834stime for ((x=1; x < 1000; x++))
do
printf -v dixTirets -- '-%.s' {0..10}
done
real 0m0,018sPython est très puisant mais peu adapté dans le cas d'un script bash.
Par contre si le script doit se compliquer, ça peut être intéressant de changer de langage.
Après ça démontre la simplicité de python ![]()
Dernière modification par Hizoka (Le 16/12/2020, à 09:02)
Kubuntu 20.04 64bits
GUI d'extraction de piste de fichier mkv -- Vignettes personnalisées -- Select boosté aux hormones -- Générateur de barre de progression
Hors ligne
#10 Le 16/12/2020, à 09:26
- pseudofab

Re : Bash : commande simple pour répéter n fois un caractère donné
@hizoka:
Merci de ta réponse. Effectivement question performance , il n'y a pas photo.
Perso c'est plutôt dans python que j'utilise parfois le retour de certaine commande bash...
Je serais dorénavant plus prudent/attentif à la performance.
# Là pour le plaisir de découvrir ...
# Envie d'apprendre Bash ou Python? Pensez aux MOOC ---> https://forum.ubuntu-fr.org/viewtopic.php?id=2030646
Hors ligne
#11 Le 16/12/2020, à 16:12
- cristobal78
Re : Bash : commande simple pour répéter n fois un caractère donné
@ micP
merci pour la commande man de ton post mais surtout pour le lien vers bash-hackers qui est effectivement plus clair que ce que j'avais pu lire jusqu'ici sur printf.
Il y a de quoi faire !
un fixe DELL, 1 laptop LDLC tous 2 sous 16.04LTS et 1 laptop Lenovo sous 18.04 LTS
Hors ligne
#12 Le 16/12/2020, à 16:24
- serged

Re : Bash : commande simple pour répéter n fois un caractère donné
@ micP
merci pour la commande man de ton post mais surtout pour le lien vers bash-hackers qui est effectivement plus clair que ce que j'avais pu lire jusqu'ici sur printf.
Il y a de quoi faire !
C'est le printf du C.... qui existe dans la plupart des langages issus du C comme le PHP, le javascript..
Linux-Mint 20.2 Uma (Cinnamon) sur ASUS F2A55/AMD A8-5600K APU et diverses machines en 19.3 ou 20.x
Hors ligne
#13 Le 16/12/2020, à 19:05
- MicP
Re : Bash : commande simple pour répéter n fois un caractère donné
Bonjour
Il y a aussi plusieurs commandes printf :
michel@ubuT450:~$ type -a printf
printf est une primitive du shell
printf est /usr/bin/printf
printf est /bin/printf
michel@ubuT450:~$ les deux dernières listées sont les mêmes :
michel@ubuT450:~$ ls -l /bin
lrwxrwxrwx 1 root root 7 juin 25 02:00 /bin -> usr/bin
michel@ubuT450:~$ Dernière modification par MicP (Le 16/12/2020, à 19:07)
Hors ligne