有趣的grep匹配在bash中

Ank*_*wal 1 linux bash

你能解释一下原因吗?

这个给了$?= 1

echo "uus" | grep -w -o [0123456789]\*
Run Code Online (Sandbox Code Playgroud)

这一个给$?= 0

echo "-uus" | grep -w -o [0123456789]\*
Run Code Online (Sandbox Code Playgroud)

rob*_*off 5

您的正则表达式可以匹配空字符串.该-w标志表示任何匹配必须以行首或非单词字符开头,后跟行尾或非单词字符.

在这种情况下uus,行的开头是一个单词字符,因此grep无法将空字符串作为单词匹配.行尾以字符开头,因此grep无法将空字符串作为单词匹配.

在这种情况下-uus,行的开头后跟-,这是一个非单词字符,因此grep可以将空字符串作为行的开头和-字符之间的单词匹配.