Comment comparer les chaînes dans Bourne Shell?
J'ai besoin de comparer des chaînes de la coquille:
var1="mtu eth0"
if [ "$var1" == "mtu *" ]
then
# do something
fi
Mais, évidemment, la "*" ne fonctionne pas dans le Shell. Est-il un moyen de le faire?
source d'informationauteur n-alexander | 2008-10-08
Vous devez vous connecter pour publier un commentaire.
bash
Plus court correctif:
Bash est
[[ ]]
ne pas obtenir glob-développé, contrairement à[ ]
(qui doit, pour des raisons historiques).bash --posix
Oh, j'ai posté trop vite. Bourne shell, pas de Bash...
${var1:0:4}
: les quatre premiers caractères de$var1
./bin/sh
Ah, désolé. Bash de l'émulation POSIX ne va pas assez loin; un véritable origine du Bourne shell n'a pas
${var1:0:4}
. Vous aurez besoin de quelque chose comme mstrobl de la solution.Utiliser les outils Unix. Le programme
cut
sera heureux de raccourcir une chaîne de caractères.... devrait faire ce que vous voulez.
Vous pouvez appeler
expr
de faire correspondre les chaînes contre les expressions régulières de l'intérieur du Bourne Shell scripts. Ci-dessous semble fonctionner:Je ferais le suivant:
Ou:
J'aime utiliser l'instruction de cas pour comparer des chaînes de caractères.
Un exemple trivial est
J'ai fait des choses folles comme
Et qui fonctionne aussi, avec certaines limitations, telles que les fichiers ne peuvent pas être plus que quelques mégaoctets et la coquille n'a tout simplement pas voir les valeurs null, donc si un fichier est plein de zéros et l'autre n'en a pas (et n'ont rien d'autre), ce test ne verra pas la différence entre les deux.
Je n'utilise pas le fichier-le comparant en tant que de graves exemple, seulement un exemple de la façon dont l'instruction est capable de faire beaucoup plus souple correspondance de chaîne que ce qui est disponible avec de test ou expr ou d'autres similaires shell expressions.
En Bourne shell, si je veux vérifier si une chaîne contient une autre chaîne:
Joindre
echo ${String} | grep -c ${Substr}
avec deux`
backticks:Pour vérifier si la sous-chaîne est au début ou à la fin:
Ou, comme un exemple de la =~ opérateur: