Je me demandais comment en shell on pouvait tester si une chaîne contenait un
caractère, voire un motif... Évidemment c'est facile, mais sans appel à une
commande externe ?
Sans commande externe, on peut utiliser le 'case'. Mais existe-t-il d'autres
façons de procéder ?
Genre un grigri du style $(mot/pattern/sub) ?
J'avoue que je sèche un peu en bash et que je ne suis pas une idole en zsh...
Bien cordialement et meilleurs voeux pour 2007
FAb
La notation ${foo%%pattern} enlève pattern à la fin de $foo. Du coup, si ${foo%%pattern} est la chaîne vide, c'est que foo matche pattern.
Ou que $foo est vide.
[ -z "$foo" ] && [ -n "${foo##*@*}" ] [...]
[ -n "$foo" ] && [ -z "${foo##*@*}" ]
-- Stéphane
FAb
Nicolas George <nicolas$ writes:
FAb wrote in message :
Bien essayé ! J'avais vu ! Mais je cherche à m'assurer du '@' dans une chaine !
Et alors ? Ça marche trsè bien. Quel est ton problème ?
Bin non cela ne fonctionne pas car le '@' est dans la chaîne, ni au début ni à la fin... Par contre, je peux tester si ma chaine est égale ${chaine/@/}. Merci j'avais besoin de remettre ça à plat.
FAb
Nicolas George <nicolas$george@salle-s.org> writes:
FAb wrote in message <m27iw4a0hz.fsf@aneto.localdomain>:
Bien essayé ! J'avais vu !
Mais je cherche à m'assurer du '@' dans une chaine login@host !
Et alors ? Ça marche trsè bien. Quel est ton problème ?
Bin non cela ne fonctionne pas car le '@' est dans la chaîne, ni au début ni à
la fin...
Par contre, je peux tester si ma chaine est égale ${chaine/@/}.
Merci j'avais besoin de remettre ça à plat.
Bien essayé ! J'avais vu ! Mais je cherche à m'assurer du '@' dans une chaine !
Et alors ? Ça marche trsè bien. Quel est ton problème ?
Bin non cela ne fonctionne pas car le '@' est dans la chaîne, ni au début ni à la fin... Par contre, je peux tester si ma chaine est égale ${chaine/@/}. Merci j'avais besoin de remettre ça à plat.
FAb
Nicolas George
FAb wrote in message :
Bin non cela ne fonctionne pas car le '@' est dans la chaîne, ni au début ni à la fin...
Mais c'est bien pour ça qu'on utilise des motifs, et pas de simples chaînes constantes : le motif, c'est *@*, mais @ tout court.
FAb wrote in message <m21wmc9ymv.fsf@aneto.localdomain>:
Bin non cela ne fonctionne pas car le '@' est dans la chaîne, ni au
début ni à la fin...
Mais c'est bien pour ça qu'on utilise des motifs, et pas de simples chaînes
constantes : le motif, c'est *@*, mais @ tout court.
Bin non cela ne fonctionne pas car le '@' est dans la chaîne, ni au début ni à la fin...
Mais c'est bien pour ça qu'on utilise des motifs, et pas de simples chaînes constantes : le motif, c'est *@*, mais @ tout court.
FAb
Stephane Chazelas writes:
2007-01-03, 10:42(+00), Stephane Chazelas:
2007-01-03, 09:57(+00), Nicolas George:
Tu fais des lignes trop longues.
FAb wrote in message :
Genre un grigri du style $(mot/pattern/sub) ?
La notation ${foo%%pattern} enlève pattern à la fin de $foo. Du coup, si ${foo%%pattern} est la chaîne vide, c'est que foo matche pattern.
Ou que $foo est vide.
[ -z "$foo" ] && [ -n "${foo##*@*}" ] [...]
[ -n "$foo" ] && [ -z "${foo##*@*}" ]
Merci à tous. Pourquoi ne pas utiliser case ? J'ai pas dit ça ! Je me doutais qu'il y avait d'autres manières de faire. C'était donc une occasion d'apprendre et mettre à jour mes grimoires :-D
FAb wrote in message <m2bqlga0zy.fsf@aneto.localdomain>:
Genre un grigri du style $(mot/pattern/sub) ?
La notation ${foo%%pattern} enlève pattern à la fin de $foo. Du coup, si
${foo%%pattern} est la chaîne vide, c'est que foo matche pattern.
Ou que $foo est vide.
[ -z "$foo" ] && [ -n "${foo##*@*}" ]
[...]
[ -n "$foo" ] && [ -z "${foo##*@*}" ]
Merci à tous.
Pourquoi ne pas utiliser case ? J'ai pas dit ça ! Je me doutais qu'il y avait
d'autres manières de faire. C'était donc une occasion d'apprendre et mettre à
jour mes grimoires :-D
La notation ${foo%%pattern} enlève pattern à la fin de $foo. Du coup, si ${foo%%pattern} est la chaîne vide, c'est que foo matche pattern.
Ou que $foo est vide.
[ -z "$foo" ] && [ -n "${foo##*@*}" ] [...]
[ -n "$foo" ] && [ -z "${foo##*@*}" ]
Merci à tous. Pourquoi ne pas utiliser case ? J'ai pas dit ça ! Je me doutais qu'il y avait d'autres manières de faire. C'était donc une occasion d'apprendre et mettre à jour mes grimoires :-D
La notation ${foo%%pattern} enlève pattern à la fin de $foo. Du coup, si ${foo%%pattern} est la chaîne vide, c'est que foo matche pattern.
Ou que $foo est vide.
[ -z "$foo" ] && [ -n "${foo##*@*}" ] [...]
[ -n "$foo" ] && [ -z "${foo##*@*}" ]
Merci à tous. Pourquoi ne pas utiliser case ? J'ai pas dit ça ! Je me doutais qu'il y avait d'autres manières de faire. C'était donc une occasion d'apprendre et mettre à jour mes grimoires :-D
FAb wrote in message <m2bqlga0zy.fsf@aneto.localdomain>:
Genre un grigri du style $(mot/pattern/sub) ?
La notation ${foo%%pattern} enlève pattern à la fin de $foo. Du coup, si
${foo%%pattern} est la chaîne vide, c'est que foo matche pattern.
Ou que $foo est vide.
[ -z "$foo" ] && [ -n "${foo##*@*}" ]
[...]
[ -n "$foo" ] && [ -z "${foo##*@*}" ]
Merci à tous.
Pourquoi ne pas utiliser case ? J'ai pas dit ça ! Je me doutais qu'il y avait
d'autres manières de faire. C'était donc une occasion d'apprendre et mettre à
jour mes grimoires :-D
La notation ${foo%%pattern} enlève pattern à la fin de $foo. Du coup, si ${foo%%pattern} est la chaîne vide, c'est que foo matche pattern.
Ou que $foo est vide.
[ -z "$foo" ] && [ -n "${foo##*@*}" ] [...]
[ -n "$foo" ] && [ -z "${foo##*@*}" ]
Merci à tous. Pourquoi ne pas utiliser case ? J'ai pas dit ça ! Je me doutais qu'il y avait d'autres manières de faire. C'était donc une occasion d'apprendre et mettre à jour mes grimoires :-D