shell case pattern[…]不允许的字符



大小写模式中的括号表达式似乎不允许使用[() &;]。然而,在POSIX shell规范或bash手册中,我似乎找不到任何此类限制(或转义解决方案)。

case '&' in
# *[&]*)  echo y ;;  # won't parse
*[&]*) echo y ;;  # will parse & work
esac
# similar for ';', ' ', '(', ')'
# not a problem for ${var#[&; ()]}

这是一个shshell脚本函数,不能调用外部实用程序(但我对bash也很好奇)。所以…是否有任何规范描述在括号表达式模式中反斜杠这些字符?

不,我不认为它在任何地方都有明确的文档。

但是可以推断,在解析模式列表时应用了令牌识别规则6。也就是说,除非加上引号,否则控制操作符、重定向操作符和输入结束符都被识别为操作符,并分隔模式。shell期望|(表示后面有另一个模式)或)(标记模式列表的结束)来完成此操作;

由于方括号在标记化过程中对解析器没有特殊意义,因此它们之间是否出现操作符是无关紧要的。${var#[&; ()]}是另一种情况;包含在令牌识别规则5和参数扩展中。

相关内容

  • 没有找到相关文章

最新更新