如何检查字符串是否包含字母字符或字母字符和数字?

jan*_*ngo 3 bash shell-script regular-expression

我想测试 STR 包含字母为 (az) (AZ) 或字母与数字

同时我有这个

[[ "$STR"  =~ [a-zA-Z0-9] ]] && echo "contain alphanumerics"
Run Code Online (Sandbox Code Playgroud)

但这即使STR只有数字也有效

而我们只想在 STR 包含字母或字母和数字时打印”

例子

将在以下情况下打印

gstfg523
HGFER34
JNF
GFGTVT
83bfF
Run Code Online (Sandbox Code Playgroud)

不会打印

2424
4356
632
@65$
&%^$
82472243(*
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 5

对于至少有一个 alpha 的 alnums,这将是:

[[ $STR =~ ^[[:alnum:]]*[[:alpha:]][[:alnum:]]*$ ]]
Run Code Online (Sandbox Code Playgroud)

(请注意,与@ilkkachu 的回答相反,这也排除了空字符串)。

或者POSIXly:

valid() case $1 in
  (*[![:alnum:]]*) false;;
  (*[[:alpha:]]*) true;;
  (*) false;;
esac

valid "$STR" || printf >&2 '"%s" is not valid\n' "$STR"
Run Code Online (Sandbox Code Playgroud)