空字符串的 Bash 正则表达式返回 true

Jor*_*eFG 2 regex bash

if [[ " " =~ ^[0-9]*$ ]]; then echo "si"; else echo "no"; fi; //Echoes No

if [[ "" =~ ^[0-9]*$ ]]; then echo "si"; else echo "no"; fi; //Echoes Yes
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是我错过了什么?

SQB*_*SQB 5

这正如预期的那样。您指定了 0 次或多次 ( *) 一个数字 ( [0-9])。空字符串是它的 0 倍。
使用 a +(这意味着“1 次或多次”)而不是 a *

if [[ " " =~ ^[0-9]+$ ]]; then echo "si"; else echo "no"; fi; // Should echo No
if [[ "" =~ ^[0-9]+$ ]]; then echo "si"; else echo "no"; fi; // Should echo No
Run Code Online (Sandbox Code Playgroud)