J'essaie de déterminer si une chaîne contient une expression régulière dans shell ( bash
).
Plus précisément, s'il contient un chiffre.
Et pendant que ça:
$ [[ string_with[6]indice =~ [0-9] ]] && echo "True" || echo "False"
fonctionne comme prévu. Lorsque j'assigne des variables LHS et RHS, il se passe quelque chose d'étrange:
$ STR=string_with[6]indice
$ REGEX=[0-9]
$ [[ string_with[6]indice =~ [0-9] ]] && echo "True" || echo "False"
False
Je voulais voir à quoi le shell dépensait mes variables et ai découvert ceci:
$ STR=string_with[6]indice
+ STR='string_with[6]indice'
$ REGEX=[0-9]
+ REGEX='[0-9]'
$ [[ $STR =~ "$REGEX" ]] && echo "True" || echo "False"
+ [[ string_with[6]indice =~ \[0-9] ]]
+ echo False
False
Où cette \
devant [0-9]
provenir, et pourquoi la coquille échapper automatiquement la première tranche [
en REGEX
?
$STR
ou non (à moins qu'il y ait un blanc incorporé), mais citer$REGEX
donne ce que vous observez, tout en omettant les guillemets. La double citation du modèle de recherche littérale se comporte de la même manière. J'imagine qu'il y aura des problèmes s'il y a un nom de fichier à un chiffre dans le répertoire actuel. Je voudrais citer entre les deux affectations variables pour éviter cela.