我编写了以下脚本来测试“可打印字符”字符类,如here所述.
#!/bin/sh
case "foo" in
*[:print:]*) echo "found a printable character" ;;
*) echo "found no printable characters" ;;
esac
我希望这个脚本输出found a printable character
,"foo"
中至少有一个(事实上,所有)字符是可打印的。相反,它输出 "found no printable characters"
。为什么 "foo"
中的字符未被识别为可打印字符?
最佳答案
字符串 [:
只是一个特殊的 inside 括号表达式,括号表达式本身由 [
引入。所以你的例子应该是:
case "foo" in
*[[:print:]]*) echo "found a printable character" ;;
*) echo "found no printable characters" ;;
esac
如果这看起来很麻烦,请考虑例如如何指定一个应匹配小写字母或数字但不匹配大写字母的模式。
有关详细信息,请参阅 section of the POSIX spec detailing bracket expressions in regular expressions . shell 模式中的括号表达式类似于正则表达式中的括号表达式,除了 !
和 ^
的处理。 (尽管在括号表达式的上下文之外,shell 模式和正则表达式之间还有其他差异)。
关于regex - 为什么 POSIX "printable characters"类不匹配简单字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10183328/