J'essaie de chercher une petite chaîne dans une chaîne beaucoup plus grande. Les deux chaînes sont stockées en tant que variables et voici un exemple de code:
#!/bin/bash
long_str=$(man man)
shrt_str="guide"
if grep -q $shrt_str $long_str ; then
echo "Found it!"
fi
Je ne pense pas que l'expansion variable fonctionne comme je m'y attendais. J'ai essayé [ ]
et [[ ]]
, en citant également les variables et en redirigeant la sortie vers /dev/null
mais peu importe ce que je fais, ça ne marchera pas.
Quelqu'un a-t-il une idée?
if echo "$long_str" | grep -q "$shrt_str";then
echo "found"
fi
ou
echo "$long_str" | grep -q "$shrt_str" && echo "found" || echo "not found"
Mais puisque vous utilisez bash Shell, utilisez alors les internes de Shell. Pas besoin d'appeler des commandes externes
shrt_str="guide"
case "$long_str" in
*"$shrt_str"* ) echo "Found";;
* ) echo "Not found";;
esac
grep est pour les fichiers ou stdin. Si vous souhaitez utiliser une variable en tant que stdin, vous devez utiliser la notation hérestring de bash:
if grep -q "$shrt_str" <<< "$long_str" ; then
Tu veux
if echo $long_str | grep -q $shrt_str; then
Une autre technique spécifique à Bash:
if [[ $long =~ $short ]] # regex match
then
echo "yes"
fi
Mais si vous n'avez pas besoin de la longue chaîne dans une variable:
if man man | grep $short; then ...
mais je suppose que c'était juste pour avoir un exemple.