最后两个数组扩展没有得到正确的突出显示:
这是sh.nanorc
定义它的设置:
# More complicated variable names; handles braces and replacements and arrays.
color brightred "\$\{[#!]?([-@*#?$!]|[0-9]+|[[:alpha:]_][[:alnum:]_]*)(\[([[:space:]]*[[:alnum:]_]+[[:space:]]*|@)\])?(([#%/]|:?[-=?+])[^}]*\}|\[|\})"
我必须在正则表达式中修复什么才能赶上这个失误?
像这样的正则表达式有点像只写语言,但我认为
(\[([[:space:]]*[[:alnum:]_]+[[:space:]]*|@)\])?
中间的 捕获了数组索引。它也不识别[*]
为索引。很难正确解决这个问题,因为数组索引几乎可以是任意的 shell“表达式”。在整数索引数组中,索引被视为算术扩展,类似的东西
[i+j]
可以使用 和 的i
和j
。在关联数组中,它可以用于例如[$x$y]
连接。[i+a[j]]
如果要在 shell 中做一些过于复杂的事情,也可能是这样。解析语法高亮几乎需要一个完整的解析器,而不是一个简单的正则表达式。(然后是命令替换,但我们不要去那里......)无论如何,很容易让它接受变量名前面的
[*]
and ,这是更改的部分:$
以及由此产生的整行:
据我所知,这
${arr[]}
是一个错误,所以我不确定它是否应该全部突出显示。如果这是最新版本的正则表达式,您可能还需要考虑发布错误报告。