Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 !!   smile
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.

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 ? lol
->


Connected \o/
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.  mad

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  big_smile

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é

Watael a écrit :

tu veux pas compiler un code en C plutôt ? lol
->

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 smile

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é

cristobal78 a écrit :

@ 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