769 votes

BASH - comment comparer deux variables de chaîne dans un if instruction

Je vais essayer d'obtenir une instruction if pour travailler dans bash (ubuntu):

#!/bin/bash

s1="hi"
s2="hi"

if ["$s1" == "$s2"]
then
  echo match
fi

J'ai essayé les diverses formes de l'instruction si, à l'aide de [["$s1" == "$s2"]], avec et sans guillemets, avec =, == et -eq, mais je reçois toujours le message d'erreur suivant:

[hi: command not found

J'ai regardé différents sites et de tutoriels et copié, mais elle ne fonctionne pas - ce que je fais mal?

finalement, je tiens à dire si $s1 contient $s2, donc si vous pouviez m'aider avec cela?

Edit: j'ai fait juste les espaces peu.. :/ quelqu'un sait-il comment dire contient?

J'ai essayé

if [[ "$s1" == "*$s2*" ]]

mais il ne fonctionne pas.

1090voto

marcog Points 39356

Pour la comparaison de chaînes, utilisez comme a répondu par d’autres. Pour l’un contient b, utilisation .

187voto

trejo08 Points 192

ce que vous devez faire est de veillez à laisser un espace entre le signe de ' [' et double guillemets où la variable contient ceci :

Notez que le signe « _ » représente l’espace blacno que vous avez besoin de laisser entre les guillemets doubles et les supports

185voto

unwind Points 181987

Vous avez besoin d’espaces :

13voto

qwerty Points 1774
$ if [ "$s1" == "$s2" ]; then echo match; fi
match
$ test "s1" = "s2" ;echo match
match
$

8voto

Mrki Points 155

Je n’ai pas accès à une machine linux dès maintenant, mais [est en fait un programme (et un builtin bash), donc je pense que vous devez mettre un espace entre [et le premier paramètre.

Notez que string op_Equality semble également être un simple =

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X