bash padrões estendidos estão ativados em [[ ... ]]
; então você pode fazer
hosts=( www-foo-1001-1-49 www-foo-1001-4-37 www-foo-1001-2-12 www-foo-1001-8-4 www-foo-1001-1-2-49 www-foo-1001-1-1-49 www-foo-1001-1 www-foo-1001 )
pattern='*-1001-+([[:digit:]])-+([[:digit:]])'
for h in "${hosts[@]}"; do
if [[ $h == $pattern ]]; then
echo "OK: $h"
else
echo "no: $h"
fi
done
OK: www-foo-1001-1-49
OK: www-foo-1001-4-37
OK: www-foo-1001-2-12
OK: www-foo-1001-8-4
no: www-foo-1001-1-2-49
no: www-foo-1001-1-1-49
no: www-foo-1001-1
no: www-foo-1001
Meu padrão começa com *-1001-
, no qual suponho que você não queira corresponder a 11001
ou 21001
etc.
O operador ==
em [[ ... ]]
é um operador de correspondência de padrões.
O operando à direita é a variável de padrão, mas sem aspas . Isso permite a interpretação do valor da variável como um padrão não uma string .