imac:~ iMacJB$ var3=${var3:0: -${#suffixe}}
imac:~ iMacJB$ echo 'reste -- attendu : abc))de (en fait vide car -0 = 0)'
reste -- attendu : abc))de (en fait vide car -0 = 0)
imac:~ iMacJB$ echo $var3
<en réponse, ici une ligne vide>
Je mets l'intégralité des essais avec sed, qui m'ont l'air conformes
Je ne mets ci-dessous que les expressions qui n'ont pas retourné le résultat attendu ou alors semble équivoque (pour moi) expr + "(" : "[()]*" -- attendu : 1 imac:~ iMacJB$ expr + "(" : "[()]*" expr: syntax error expr + "((()abc))" : ".*[^()]([()]*)$" -- attendu : )) imac:~ iMacJB$ expr + "((()abc))" : ".*[^()]([()]*)$" expr: syntax error imac:~ iMacJB$ var="a(bc)def(gh)i" expr length "${var}" -- attendu : 13 imac:~ iMacJB$ expr length "${var}" expr: syntax error imac:~ iMacJB$ var2="abcdefghi" echo "${var2:0:(-2)}" -- attendu : abcdefg imac:~ iMacJB$ echo "${var2:0:(-2)}" -bash: (-2): substring expression < 0 echo "${var2:0: -2}" -- attendu : abcdefg imac:~ iMacJB$ echo "${var2:0: -2}" -bash: -2: substring expression < 0 imac:~ iMacJB$ var3="((()abc))" imac:~ iMacJB$ var3=${var3:0: -${#suffixe}} -bash: -${#suffixe}: substring expression < 0 imac:~ iMacJB$ echo 'reste -- attendu : abc' reste -- attendu : abc imac:~ iMacJB$ echo $var3 abc)) var3=((()abc))de imac:~ iMacJB$ suffixe=$(expr "${var3}" : ".*[^()]([()]*)$") imac:~ iMacJB$ echo 'suffixe -- attendu : ' suffixe -- attendu : imac:~ iMacJB$ echo $suffixe <en réponse, ici une ligne vide> imac:~ iMacJB$ var3=${var3:0: -${#suffixe}} imac:~ iMacJB$ echo 'reste -- attendu : abc))de (en fait vide car -0 = 0)' reste -- attendu : abc))de (en fait vide car -0 = 0) imac:~ iMacJB$ echo $var3 <en réponse, ici une ligne vide> Je mets l'intégralité des essais avec sed, qui m'ont l'air conformes imac:~ iMacJB$ echo "((()abc()def))" | sed -e 's/^([()]*).*/1/' ((() imac:~ iMacJB$ echo "((()abc()def))" | sed -e 's/^[()]*//' -e 's/[()]*$//' abc()def imac:~ iMacJB$ echo "((()abc()def))" | sed -e 's/.*[^()]([()]*).*/1/' )) imac:~ iMacJB$ var3=((()abc))de Le reste OK. Si ça peut t'aider ;-) -- J. B.
Olivier Miakinen
Bonjour, et merci pour ta réponse. Je vais analyser ce que ça signifie. Le 19/10/2019 02:10, Joseph-B a écrit :
Olivier Miakinen <om+ posta une série de tests :
#!/bin/bash etc.
Je ne mets ci-dessous que les expressions qui n'ont pas retourné le résultat attendu ou alors semble équivoque (pour moi) expr + "(" : "[()]*" -- attendu : 1 imac:~ iMacJB$ expr + "(" : "[()]*" expr: syntax error expr + "((()abc))" : ".*[^()]([()]*)$" -- attendu : )) imac:~ iMacJB$ expr + "((()abc))" : ".*[^()]([()]*)$" expr: syntax error
Donc : impossible d'utiliser le '+' dans 'expr' pour lui dire que la chaîne "(" est vraiment une chaîne à tester et pas un mot-clé. Évidemment ça ne marche pas non plus pour une chaîne plus longue. Mais j'avais trouvé un contournement en ajoutant un caractère '_' à la fois à la chaîne à tester et à la regexp.
imac:~ iMacJB$ var3=${var3:0: -${#suffixe}} imac:~ iMacJB$ echo 'reste -- attendu : abc))de (en fait vide car -0 = 0)' reste -- attendu : abc))de (en fait vide car -0 = 0) imac:~ iMacJB$ echo $var3 <en réponse, ici une ligne vide>
Idem.
Je mets l'intégralité des essais avec sed, qui m'ont l'air conformes imac:~ iMacJB$ echo "((()abc()def))" | sed -e 's/^([()]*).*/1/' ((() imac:~ iMacJB$ echo "((()abc()def))" | sed -e 's/^[()]*//' -e 's/[()]*$//' abc()def imac:~ iMacJB$ echo "((()abc()def))" | sed -e 's/.*[^()]([()]*).*/1/' )) imac:~ iMacJB$ var3=((()abc))de
Ça au moins c'est une bonne nouvelle.
Le reste OK. Si ça peut t'aider ;-)
Grandement. Merci ! -- Olivier Miakinen
Bonjour, et merci pour ta réponse. Je vais analyser ce que ça signifie.
Le 19/10/2019 02:10, Joseph-B a écrit :
Olivier Miakinen <om+news@miakinen.net> posta une série de tests :
#!/bin/bash etc.
Je ne mets ci-dessous que les expressions qui n'ont pas retourné le résultat
attendu ou alors semble équivoque (pour moi)
Donc : impossible d'utiliser le '+' dans 'expr' pour lui dire que
la chaîne "(" est vraiment une chaîne à tester et pas un mot-clé.
Évidemment ça ne marche pas non plus pour une chaîne plus longue.
Mais j'avais trouvé un contournement en ajoutant un caractère '_'
à la fois à la chaîne à tester et à la regexp.
imac:~ iMacJB$ var3=${var3:0: -${#suffixe}}
imac:~ iMacJB$ echo 'reste -- attendu : abc))de (en fait vide car -0 = 0)'
reste -- attendu : abc))de (en fait vide car -0 = 0)
imac:~ iMacJB$ echo $var3
<en réponse, ici une ligne vide>
Idem.
Je mets l'intégralité des essais avec sed, qui m'ont l'air conformes
Bonjour, et merci pour ta réponse. Je vais analyser ce que ça signifie. Le 19/10/2019 02:10, Joseph-B a écrit :
Olivier Miakinen <om+ posta une série de tests :
#!/bin/bash etc.
Je ne mets ci-dessous que les expressions qui n'ont pas retourné le résultat attendu ou alors semble équivoque (pour moi) expr + "(" : "[()]*" -- attendu : 1 imac:~ iMacJB$ expr + "(" : "[()]*" expr: syntax error expr + "((()abc))" : ".*[^()]([()]*)$" -- attendu : )) imac:~ iMacJB$ expr + "((()abc))" : ".*[^()]([()]*)$" expr: syntax error
Donc : impossible d'utiliser le '+' dans 'expr' pour lui dire que la chaîne "(" est vraiment une chaîne à tester et pas un mot-clé. Évidemment ça ne marche pas non plus pour une chaîne plus longue. Mais j'avais trouvé un contournement en ajoutant un caractère '_' à la fois à la chaîne à tester et à la regexp.
imac:~ iMacJB$ var3=${var3:0: -${#suffixe}} imac:~ iMacJB$ echo 'reste -- attendu : abc))de (en fait vide car -0 = 0)' reste -- attendu : abc))de (en fait vide car -0 = 0) imac:~ iMacJB$ echo $var3 <en réponse, ici une ligne vide>
Idem.
Je mets l'intégralité des essais avec sed, qui m'ont l'air conformes imac:~ iMacJB$ echo "((()abc()def))" | sed -e 's/^([()]*).*/1/' ((() imac:~ iMacJB$ echo "((()abc()def))" | sed -e 's/^[()]*//' -e 's/[()]*$//' abc()def imac:~ iMacJB$ echo "((()abc()def))" | sed -e 's/.*[^()]([()]*).*/1/' )) imac:~ iMacJB$ var3=((()abc))de
Ok. Heureusement, la syntaxe ${#var} semble fonctionner puisque tu ne l'as pas mise dans ta réponse.
Oui, et je mets la commande pour que tu vérifies imac:~ iMacJB$ var="a(bc)def(gh)i" echo "${#var}" -- attendu : 13 imac:~ iMacJB$ echo "${#var}" 13
Je mets l'intégralité des essais avec sed, qui m'ont l'air conformes
Ça au moins c'est une bonne nouvelle.
À signaler que des commandes sed qui passaient bien dans le Terminal m'ont parfois causé des soucis (certains caractères non pris en compte, mais je ne sais plus lesquels) quand encapsulées dans un "do shell script" d'AS qui est le fautif. Mais le bug est contournable par anticipation -- J. B.
Olivier Miakinen <om+news@miakinen.net> wrote:
Ok. Heureusement, la syntaxe ${#var} semble fonctionner puisque tu
ne l'as pas mise dans ta réponse.
> Je mets l'intégralité des essais avec sed, qui m'ont l'air conformes
Ça au moins c'est une bonne nouvelle.
À signaler que des commandes sed qui passaient bien dans le Terminal
m'ont parfois causé des soucis (certains caractères non pris en compte,
mais je ne sais plus lesquels) quand encapsulées dans un "do shell
script" d'AS qui est le fautif.
Mais le bug est contournable par anticipation
Ok. Heureusement, la syntaxe ${#var} semble fonctionner puisque tu ne l'as pas mise dans ta réponse.
Oui, et je mets la commande pour que tu vérifies imac:~ iMacJB$ var="a(bc)def(gh)i" echo "${#var}" -- attendu : 13 imac:~ iMacJB$ echo "${#var}" 13
Je mets l'intégralité des essais avec sed, qui m'ont l'air conformes
Ça au moins c'est une bonne nouvelle.
À signaler que des commandes sed qui passaient bien dans le Terminal m'ont parfois causé des soucis (certains caractères non pris en compte, mais je ne sais plus lesquels) quand encapsulées dans un "do shell script" d'AS qui est le fautif. Mais le bug est contournable par anticipation -- J. B.