[bash] substitution optionnelle
Résoluj'ai dans un script bash c'est 2 lignes :
nom_serveur=$(hostname)
nom_serveur=${nom_serveur//\./_}
quand le nom de serveur contient un ou plusieurs point, pas de soucis, les points sont changés en "_" par contre si le nom du serveur (hostname) ne contient pas de ".", j'ai droit à un :
Bad substitution
je pensais pourtant que le remplacement aurait lieu si et seulement si le "." était présent ... existe-il un moyen élégant de transformer la substitution en option ?
Merci pour votre aide !
Stéphane
3 réponses
Le problème porte sur une substitution Bash censée remplacer les points du nom d'hôte (hostname) par des underscores via nom_serveur=${nom_serveur//\./_}, et renvoie 'Bad substitution' si le nom ne contient pas de point. Plusieurs explications indiquent que le problème vient de la différence entre Bash et d'autres shells comme dash ou sh, et que la substitution étendue n'est pas supportée. Certaines explications soulignent qu'il faut invoquer explicitement Bash pour éviter l'erreur, et que l'usage dépend du shell actif, puisque sh peut renvoyer Bad substitution sur certains environnements. Des conseils portent sur la compatibilité et l'utilisation de méthodes portables du shell courant, et l'échange évoque également l'usage de $! et de la gestion des retours selon le contexte système.
-
ModérateurSalut,
Pas chez moi~ $ a=blabla ~ $ b="bla.bla" ~ $ echo $a blabla ~ $ echo $b bla.bla ~ $ echo ${b/\./_} bla_bla ~ $ echo ${a/\./_} blabla
-
hello lami20j;
pas mal ....
j'ai ajouté un echo pour voir :
63 nom_serveur=$(hostname) 64 echo "nom du serveur : ${nom_serveur}\n"; 65 nom_serveur=${nom_serveur//\./_}
et j'ai bien :
nom du serveur : companysmtp3
/superchemin/pleindesousrep/script_de_la_mort.sh: 65: Bad substitution
....
comprend pas ...
Stéphane-
-
-
ModérateurDu fait la médisance n'est pas si médisante que ça ;-))
-
-
-
-
par contre j'ai cette erreur maintenant :
$!: unbound variable
$! n'existe pas en /bin/bash ? pour récupérer l'erreur systeme ?
Stéphane-
-
oui, je me base bien sur le $? pour le code retour mais on m'avais indiqué $! pour obtenir des infos complémentaires en cas d'erreur au niveau du systeme. dans ce thread : https://forums.commentcamarche.net/forum/affich-18962490-perl-bizarre-retour-de-system#p18975703
mort de rire, c'est toi qui me l'a appris : "Salut,
Mets aussi $! dans ton die, pour voir l'erreur système "
Stéphane -
-
-
-