1 votes

Bash recherche et remplace remplace le caractère supplémentaire

Je essaie d'utiliser l'expansion des paramètres de bash pour remplacer un signe dollar et j'ai du mal. J'ai essayé différentes variations mais rien ne fonctionne, qu'est-ce que je fais mal? Exemple :

in_amt="($12.34)"
amt=${in_amt/$/}
echo $amt      

produit (2.34) - le signe dollar et le "1" qui suit sont supprimés

J'ai essayé :

amt=${in_amt/[$]/[]}
amt=${in_amt/[$]}
amt=${in_amt/[\$]}
amt=${in_amt/\$}
amt=${in_amt/(\$/(}

et probablement d'autres variations, avec le même résultat. Cela se produit sur deux versions de bash : 3.2 (Macbook Air) et 5.0.17 (Ubuntu 20.04).

Le remplacement des caractères "normaux" fonctionne.

3voto

Andreas Linnert Points 101

Vous devriez définir l'assignation initiale entre guillemets simples car sinon, dans la chaîne $1, elle est interprétée par le shell

in_amt='($12.34)'
amt=${in_amt/$/}
echo $amt      

Ou échappez le signe $:

in_amt="(\$12.34)"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X