52 votes

Comment déterminer si une chaîne de caractères est une sous-chaîne d'une autre chaîne de caractères en bash ?

Je veux voir si une chaîne de caractères se trouve à l'intérieur une partie d'une autre chaîne.
par exemple :

'ab' in 'abc' -> true
'ab' in 'bcd' -> false

Comment puis-je faire cela dans un conditionnel d'un bash script ?

5voto

Campa Points 753

L'esprit [[ y " :

[[ $a == z* ]]   # True if $a starts with an "z" (pattern matching).
[[ $a == "z*" ]] # True if $a is equal to z* (literal matching).

[ $a == z* ]     # File globbing and word splitting take place.
[ "$a" == "z*" ] # True if $a is equal to z* (literal matching).

Comme l'a dit @glenn_jackman, mais gardez à l'esprit que si vous mettez tout le deuxième terme entre guillemets, le test passera à littéral correspondant.

Source : http://tldp.org/LDP/abs/html/comparison-ops.html

4voto

laubster Points 91

Similaire à la réponse d'edwin, mais avec une portabilité améliorée pour posix et ksh, et un peu moins bruyant que celui de Richard :

substring=ab

string=abc
if [ "$string" != "${string%$substring*}" ]; then
    echo "$substring IS in $string"
else
    echo "$substring is NOT in $string"
fi

string=bcd
if [ "$string" != "${string%$substring*}" ]; then
    echo "$string contains $substring"
else
    echo "$string does NOT contain $substring"
fi

Sortie :

abc contains ab
bcd does NOT contain ab

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