Como posso detectar uma abertura {
e um fechamento }
em variáveis como
var="\*.{cp,cpp,f90,f95,f03,f08}"
O seguinte não funcionou
[[ "$ext" =~ {(.*)} ]] && echo "Detected {}"
Como posso detectar uma abertura {
e um fechamento }
em variáveis como
var="\*.{cp,cpp,f90,f95,f03,f08}"
O seguinte não funcionou
[[ "$ext" =~ {(.*)} ]] && echo "Detected {}"
Você pode usar a correspondência de padrões simples com
==
(ou, equivalentemente, ) dentro de uma construção de teste estendido do=
bash :[[ ... ]]
A divisão de palavras e a expansão do nome do caminho não são executadas internamente
[[ ... ]]
, portanto, você não precisa citar o LHS ou o RHS.Se você quiser usar a correspondência de expressão regular , precisará escapar ou citar as chaves porque elas são especiais em um regex estendido do bash, mas não no
.*
:ou
Observe as seguintes diferenças adicionais:
correspondência de padrão comum (com
==
) funciona em toda a string, portanto, você precisa de pelo menos um*
curinga inicial para corresponder ao que vem antes da chave de abertura (e um final*
se você espera caracteres após a chave de fechamento)correspondência de expressão regular (
=~
) corresponde a qualquer lugar na string (a menos que esteja ancorado com^
e/ou$
) para que você possa se safar apenas com a correspondência curinga.*
no meio. Estritamente falando, deve\{[^}]*\}
corresponder a uma sequência de chaves não fechadas seguidas por uma chave de fechamento.Tudo o que foi dito, eu suspeito que você realmente não quer colocar
\*.{cp,cpp,f90,f95,f03,f08}
em uma variável , porque a expansão do brace não vai realmente expandir a menos que você recorra a hacks comoeval echo "$var"
.Tente isso no bash para ver os resultados: