Je cherche une comparaison avec des crochets dans bash.Comment comparer les chaînes contenant un crochet dans Bash
Situation: J'ai un fichier hosts qui contient les noms d'hôte qui ressemble
[debian]
ansible
host
names
[centos]
more
hosts
maintenant je veux scanner les clés ssh (premier écho, utiliser plus tard-keyscan ssh) de tous les hôtes:
while read hostName
do
if [[ $hostName != "" ]] && [[ $hostName != "\[*" ]] ; then
echo $hostName
#ssh-keyscan $hostName
fi
done < hosts
tandis que [[ $hostName != "" ]]
fait son travail la partie contenant la comparaison pour les crochets [[ $hostName != "\[*" ]]
ne fait pas. Atm le résultat ressemble à ceci:
[debian]
ansible
host
names
[centos]
more
hosts
Je veux que ça ressemble à:
ansible
host
names
more
hosts
Bien que par exemple How to compare strings in Bash couvre le sujet général, il ne couvre pas ma question. Aussi, je voudrais éviter d'utiliser sed ou d'autres méthodes de remplacement de chaîne avant de pouvoir comparer la chaîne-si possible. Est-ce que quelqu'un sait comment comparer les crochets dans une chaîne de bash?
Aussi ne fonctionne pas: this solution, adapté comparaison (peut-être j'adaptèrent dans le mauvais sens?):
if [[ $hostName != "" ]] && [ "$hostName" != "*[*" ]
On dirait une autre réponse sur la première page Indexés aider: https://stackoverflow.com/a/16263820/1354854. La solution est 'if [[$ hostName! = *" ["*]]'. Le caractère générique doit être _outside_ les guillemets, ce qui n'est pas intuitif, ou tout simplement non-guillemet entièrement puisque vous utilisez '[['. – bnaecker
Huh, n'a pas vu celui-là. OK ça marche, merci beaucoup :). – guz4217