2 votes

Trouver une chaîne dans une variable en bash

J'ai le code suivant en bash :

string="/opt/directory/"

Ensuite, lorsque je fais ce qui suit :

if [[ $string != *"directory"* ]]

il l'interprète comme si le répertoire n'était pas dans la chaîne. Pourquoi ? Comment puis-je résoudre ce problème ?

EDIT :

Je me sens vraiment bête à ce sujet, j'avais en fait apporté quelques modifications à mon script, en utilisant le slash avant l'un d'eux et je n'arrivais pas à comprendre ce qui n'allait pas pendant environ une heure et après que l'un d'entre vous a mentionné que cela devrait fonctionner comme ça, j'ai réalisé que c'était parce qu'à un moment donné j'ai réaffecté la variable à autre chose, c'est pourquoi elle ne le prenait pas en compte.

Peut-être que je vais supprimer cette question, car c'était vraiment de ma faute et je ne pense pas qu'elle sera utile à qui que ce soit !

2voto

Il semble fonctionner correctement. Si j'essaie ceci:

chaîne="/opt/directory/"

if [[ $string != *"directory"* ]]; then
    echo "true"
else
    echo "false"
fi

Alors il signale correctement false. En d'autres termes, la question "est-ce que $string ne contient pas *"directory"*" est fausse, car $string contient bien *"directory"*.


Peut-être vouliez-vous demander "est-ce que $string contient *"directory"*", auquel cas vous devez utiliser:

if [[ $string == *"directory"* ]]

(Notez l'utilisation de == au lieu de !=.)

0voto

A.B. Points 84870

En utilisant :

chaîne="/opt/directory/"
if [[ $chaîne != *directory* ]]; then
    echo "non trouvé"
else
    echo "trouvé"
fi

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X