URL: https://linuxfr.org/forums/programmation-shell/posts/ligne-de-code-qui-refuse-d-etre-factorisee Title: Ligne de code qui refuse d'être factorisée Authors: gzgtrhe Date: 2023年11月17日T21:33:06+01:00 License: CC By-SA Tags: bash Score: 1 Bonjour à tous les pro du shell... et du bash en particulier, J'ai écrit un script générant une chaîne de caractères de longueur et complexité variable selon les besoins, histoire de faciliter la génération de login/password pour les services accessibles sur Internet. J'ai voulu factoriser les sections redondantes pour avoir une meilleure lisibilité et simplifier d'éventuels changements futurs et je fais face à une difficulté. Initialement, la ligne à factoriser dans une fonction ressemblait à ça : ```bash strings --bytes=1 < /dev/urandom | tr --delete a-z | head --bytes="${LENGHT}" | xargs --null ``` Pour avoir plus de complexité; je changeais le a-z en azA-Z, A-Z0-9, '[:alnum:]', etc. Et ça se factorise sans problèmes dans cette fonction : ```bash _get_random() { local char_set local symbol symbol="1ドル" char_set="2ドル" printf "%s\n" "The generated password is :" strings --bytes=1 < /dev/urandom | tr --delete --complement "${symbol}" | head --bytes="${LENGHT}" | xargs --null printf "%s\n" "The password entropy is : $(_entropy ${char_set}) bits." } ``` Et ça s'utilise avec par exemple : ```bash _get_random a-z 26 ``` Le soucis est avec cette ligne qui génère les chaînes les plus complexes : ```bash strings --bytes=1 < /dev/urandom | tr --delete '[:space:]' | head --bytes="${LENGHT}" | xargs --null ``` Curieusement le '[:space:]' ne passe pas alors que le '[:alnum:]' passe comme une lettre à la poste. Selon vous, d'où vient mon erreur ? PS : j'ai du mal avec la mise en page du code, il y a le ${symbol} qui a merdé.