如何匹配bash变量中的空格

Mic*_*nez 5 bash

根据手册页,右侧的字符串=~被视为扩展正则表达式。我尝试了以下方法来匹配两边被空格包围的“ok”,但没有任何效果。知道我做错了什么吗?也许有一个需要启用的shell选项?

if ! [[ $RESULT =~ \s"ok"\s ]]; then

if ! [[ $RESULT =~ [:space:]"ok"[:space:] ]]; then

if ! [[ $RESULT =~ [ \t\r\n\v\f]"ok"[ \t\r\n\v\f] ]]; then
Run Code Online (Sandbox Code Playgroud)

注意:下面的自我回答问题。

Mic*_*nez 10

好的,事实证明一个需要[[:space:]]而不是[:space:]. 以下工作:

if ! [[ $RESULT =~ [[:space:]]"ok"[[:space:]] ]]; then
Run Code Online (Sandbox Code Playgroud)

  • 那是因为`[:space:]` 本身只是*一个由`:`、`s`、`p`、`a`、`c`、`e`组成的字符类*。`[:space:]` 等的预期特殊含义仅在真正的字符类中可用,否则,如果其中任何一个会自己创建一个类,就不可能将其中的几个组合到一个类中. (3认同)