如何检测变量的打开{
和关闭}
,例如
var="\*.{cp,cpp,f90,f95,f03,f08}"
以下没有工作
[[ "$ext" =~ {(.*)} ]] && echo "Detected {}"
如何检测变量的打开{
和关闭}
,例如
var="\*.{cp,cpp,f90,f95,f03,f08}"
以下没有工作
[[ "$ext" =~ {(.*)} ]] && echo "Detected {}"
您可以在 bash扩展测试构造中使用简单的模式匹配(
==
或等效地, ):=
[[ ... ]]
内部不执行分词和路径名扩展,
[[ ... ]]
因此您不需要引用 LHS 或 RHS。如果要使用正则表达式匹配,则需要转义或引用大括号,因为它们在 bash 扩展正则表达式中是特殊的,但不是
.*
:或者
请注意以下其他差异:
普通模式匹配(with
==
)适用于整个字符串,因此您至少需要一个前导*
通配符来匹配左大括号之前的内容(*
如果您期望右大括号之后的字符,则需要一个尾随)正则表达式匹配(
=~
) 匹配字符串中的任何位置(除非使用^
and/or锚定$
),因此您可以只使用.*
两者之间的通配符匹配。严格来说,应该是\{[^}]*\}
匹配一系列非右大括号,后跟一个右大括号。说了这么多,我怀疑你真的不想放在
\*.{cp,cpp,f90,f95,f03,f08}
一个变量中,因为除非你求助于像eval echo "$var"
.在 bash 中尝试此操作以查看结果: