我想确保一个变量不包含特定字符(在这种情况下,“α”),但下面的代码失败(返回1):匹配Unicode字符
FOO="test" && [[ $FOO =~ '^[^α]*$' ]]
编辑:根据以下stema的反馈更改模式,要求仅匹配从开始到结束的“非α”字符。
用例如, 'x'按预期工作。为什么它会以'α'失败,我该如何完成这项工作?
系统信息:
$ zsh --version
zsh 4.3.11 (i386-apple-darwin11.0)
$ locale
LANG="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_CTYPE="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_ALL="en_GB.UTF-8"
编辑2:我现在测试运行Ubuntu 11.10与4.3.11的zsh具有相同区域设置在Linux机器上,并且有它的工作原理 - 即FOO="test" && [[ $FOO =~ '^[^α]*$' ]]
回报的成功。我正在运行Mac OS X 10.7.2。
哦,对。所以它不一定需要匹配整个字符串。是的,那么你是对的,它应该是'FOO ='test'&& [[$ FOO =〜'^ [^α] * $']]''。但那仍然失败。将“α”更改为“x”会成功,因此在此处使用“α”字符时必定会有失败的情况。 – beta 2011-12-18 09:28:20