Regex 为什么POSIX“会;“可打印字符”;类与简单字符串不匹配?

Regex 为什么POSIX“会;“可打印字符”;类与简单字符串不匹配?,regex,linux,shell,posix,non-printable,Regex,Linux,Shell,Posix,Non Printable,如前所述,我编写了以下脚本来测试“可打印字符”字符类 我希望这个脚本能够输出找到一个可打印的字符,在“foo”中至少有一个(实际上,所有)字符是可打印的。相反,它输出“未找到可打印字符”。为什么“foo”中的字符不被识别为可打印字符?字符串[:仅在括号表达式中是特殊的,括号表达式本身由[引入。因此,您的示例应该是: case "foo" in *[[:print:]]*) echo "found a printable character" ;; *) echo "found n

如前所述,我编写了以下脚本来测试“可打印字符”字符类


我希望这个脚本能够输出
找到一个可打印的字符
,在
“foo”
中至少有一个(实际上,所有)字符是可打印的。相反,它输出
“未找到可打印字符”
。为什么
“foo”
中的字符不被识别为可打印字符?

字符串
[:
仅在括号表达式中是特殊的,括号表达式本身由
[
引入。因此,您的示例应该是:

case "foo" in
    *[[:print:]]*) echo "found a printable character" ;;
    *) echo "found no printable characters" ;;
esac
如果这看起来很麻烦,请考虑如何指定一个模式,该模式应匹配小写字母或数字,但不匹配大写字母

有关更多信息,请参见shell模式中的.Bracket表达式与正则表达式中的Bracket表达式类似,除了对
^
的处理(尽管在其他方面,shell模式和正则表达式之间有其他区别,但不包括Bracket表达式的上下文)

case "foo" in
    *[[:print:]]*) echo "found a printable character" ;;
    *) echo "found no printable characters" ;;
esac