211 votes

Comparaison de chaînes en bash. [[ : non trouvé

J'essaie de comparer des chaînes de caractères en bash. J'ai déjà trouvé une réponse sur comment le faire sur stackoverflow . Dans le script que j'essaie, j'utilise le code soumis par Adam dans la question mentionnée :

#!/bin/bash
string='My string';

if [[ "$string" == *My* ]]
then
  echo "It's there!";
fi

needle='y s'
if [[ "$string" == *"$needle"* ]]; then
  echo "haystack '$string' contains needle '$needle'"
fi

J'ai également essayé l'approche de ubuntuforums que vous pouvez trouver dans le 2ème post

if [[ $var =~ regexp ]]; then
  #do something
fi

Dans les deux cas, je reçois une erreur :

[[: not found

Qu'est-ce que je fais de mal ?

9voto

Hatzil Points 119

Si vous savez que vous êtes sous bash, et que vous obtenez toujours cette erreur, assurez-vous que vous écrivez le if avec des espaces.

[[1==1]] # This outputs error

[[ 1==1 ]] # OK

4voto

Smeterlink Points 21

Spécifier bash au lieu de sh lors de l'exécution du script. J'ai personnellement remarqué qu'ils sont différents sous ubuntu 12.10 :

bash script.sh arg0 ... argn

3voto

Antonio Moreno Points 313

Exécutez dans votre terminal :

sudo update-alternatives --install /bin/sh sh /bin/bash 100

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