Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[bash] test string contient string ?

5 réponses
Avatar
billiob
Salut

Dans mon script bash, j'ai deux variables comme ci-dessous :
var_1=" 1 3 4 5 6 8 9 15 19 21 24 26 27 28 32 "
var_2=" 2 11 12 13 14 16 17 18 20 22 23 25 29 30 31 "

ma_var=3

Comment faire un test, en bash si possible, pour savoir si ma_var est
"contenu" dans var_1 ou var_2 ?
Dans cet exemple, ma_var est "dans" var_1.

Merci d'avance
--
@+
billiob
Remplaçez INVALID par swissinfo pour m'envoyer un mail.

5 réponses

Avatar
Stephane Zuckerman
Bonsoir,

var_1=" 1 3 4 5 6 8 9 15 19 21 24 26 27 28 32 "
var_2=" 2 11 12 13 14 16 17 18 20 22 23 25 29 30 31 "

ma_var=3

Comment faire un test, en bash si possible, pour savoir si ma_var est
"contenu" dans var_1 ou var_2 ?


Pourquoi ne pas faire un for ?

for i in $var_1; do
if [$ma_var == $i]; then
echo "ma_var est dans ma_var1"
fi
done

Je ne suis pas assez bon en bash pour te faire une fonction de ca, mais
globalement, tu dois executer deux fois cette boucle pour chacun de tes
ensembles.

Stephane.

--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)

Avatar
billiob
Bonsoir,


var_1=" 1 3 4 5 6 8 9 15 19 21 24 26 27 28 32 "
var_2=" 2 11 12 13 14 16 17 18 20 22 23 25 29 30 31 "

ma_var=3

Comment faire un test, en bash si possible, pour savoir si ma_var est
"contenu" dans var_1 ou var_2 ?



Pourquoi ne pas faire un for ?

for i in $var_1; do
if [$ma_var == $i]; then
echo "ma_var est dans ma_var1"
fi
done

Je ne suis pas assez bon en bash pour te faire une fonction de ca, mais
globalement, tu dois executer deux fois cette boucle pour chacun de tes
ensembles.

Stephane.

ok

merci, ça marche, mais si qqn a qqch de plus rapide, je suis preneur !
--
@+
billiob
Remplaçez INVALID par swissinfo pour m'envoyer un mail.


Avatar
Etienne de Tocqueville
billiob a écrit sur fr.comp.os.unix :

merci, ça marche, mais si qqn a qqch de plus rapide, je suis preneur !


Ben tout simplement un « expr "$var_1" : ".* $ma_var " », non ?

Avatar
Isidore Ducasse
Etienne de Tocqueville wrote:

Ben tout simplement un « expr "$var_1" : ".* $ma_var " », non ?


j]$ export var_1="1 2 3"
[ j]$ export ma_var=2
[ j]$ expr "$var_1" : ".* $ma_var " 
0


Je comprends pas, tu pourrais expliquer?

Avatar
Etienne de Tocqueville
Isidore Ducasse a écrit sur fr.comp.os.unix :

j]$ export var_1="1 2 3"


C'était var_1=" 1 2 3 " avec un espace au début et à la fin, sinon ça ne
trouverait ni " 1 " ni " 3 ". Si on ne met pas d'espace au début et à la
fin de var_1, le expr doit s'écrire comme expr " $var_1 " : ".* $ma_var "

[ j]$ expr "$var_1" : ".* $ma_var " 


Ca ne marche pas parce qu'il y a un espace insécable (0xA0) après la
dernière guillement. Sans cet espace, ça marche très bien (parce que
coup de bol, le "2" était le seul avec lequel ça pouvait marcher sans
avoir mis d'espace au début et à la fin de var_1). Cet espace insécable
vient d'un copier-coller avec mon article, parce que ma "»" en été
précédé d'un.