#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 ?
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
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"
----------
Connected \o/
Welcome to sHell. · eval is evil.
En 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 ?
->
Connected \o/
Welcome to sHell. · eval is evil.
En 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é.
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
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
- Compte supprimé
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?
#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,834s
time for ((x=1; x < 1000; x++))
do
printf -v dixTirets -- '-%.s' {0..10}
done
real 0m0,018s
Python 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)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#10 Le 16/12/2020, à 09:26
- Compte supprimé
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.
#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 !
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
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..
LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)
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