Je veux voir si une chaîne est à l'intérieur d' une partie d'une autre chaîne.
par exemple:
'ab' in 'abc' -> true
'ab' in 'bcd' -> false
Comment puis-je faire cela dans les conditions d'un script bash?
command-line
bash
scripts
Lucio
la source
la source
echo
déclarations. Parce que je reçoisab is not in abc
ab was found in abc
, mais si j’utilise,substring=z
je reçoisz was found in abc
ab is not in abc
. Maisz was found in abc
. C'est drôle: D[[ "bcd" =~ "ab" ]]
[[ "abc" =~ "ab" ]]
les crochets sont pour le test, et comme il s’agit de crochets doubles, il peut donc contenir des tests supplémentaires comme
=~
.Donc, vous pouvez utiliser ce formulaire quelque chose comme
Edit: corrigé "= ~", s'était retourné.
la source
fail
avec ces paramètres:var2="abcd"
[[ $string =~ $substring ]]
. J'ai mis à jour la réponse.Utilisation de modèles de nom de fichier bash ( modèles "glob")
la source
Les deux approches suivantes fonctionneront sur n’importe quel environnement compatible POSIX, pas seulement en bash:
Les deux sorties ci-dessus:
Le premier a l'avantage de ne pas engendrer un
grep
processus séparé .Notez que j'utilise
printf %s\\n "${foo}"
au lieu deecho "${foo}"
parce queecho
pourrait être mutilé${foo}
s'il contient des barres obliques inverses.la source
xrandr
noms de moniteur stockés dans une variable. +1 et bienvenue dans le club représentant 1K :)déclaration de cas
Ceci est la solution la plus portable, fonctionnera même sur les vieux obus Bourne et Korn
Échantillon échantillon:
Notez que vous ne devez pas utiliser spécifiquement,
echo
vous pouvez utiliserexit 1
etexit 0
signifier le succès ou l'échec.Ce que nous pourrions aussi faire, c’est créer une fonction (qui peut être utilisée dans de gros scripts si nécessaire) avec des valeurs de retour spécifiques (0 sur correspondance, 1 sur absence de correspondance):
grep
Cette approche particulière est utile avec les déclarations if-else dans
bash
. Aussi principalement portableAWK
Python
Rubis
la source
Attention au
[[
et"
:Donc, comme @glenn_jackman l'a dit, mais sachez que si vous mettez tout le deuxième terme entre guillemets, le test passera à la correspondance littérale .
Source: http://tldp.org/LDP/abs/html/comparison-ops.html
la source
Semblable à la réponse d’edwin, mais avec une portabilité améliorée pour posix & ksh, et un toucher moins bruyant que celui de Richard:
Sortie:
la source