Bash 检查字符串是否包含非数字字符

Bash 检查字符串是否包含非数字字符,bash,grep,Bash,Grep,如何检查给定字符串是否包含非数字字符,例如: x11z returns > 0 x$1 also returns > 0 1111~ also returns > 0 我所说的字符是指不在0-9之间的所有内容。我看到了类似的线程,但其中没有一个谈论“非0-9”,除非它们显示其a-z或a-z仅使用一个否定字符类: grep [^0-9] 这将匹配任何非数字字符,而不是仅由数字组成的字符串。类似以下内容: if [[ "xf44wd" =~ [0-9]+ ]]; then

如何检查给定字符串是否包含非数字字符,例如:

x11z returns > 0
x$1 also returns > 0
1111~ also returns > 0

我所说的字符是指不在
0-9之间的所有内容。我看到了类似的线程,但其中没有一个谈论“非0-9”,除非它们显示其
a-z
a-z

仅使用一个否定字符类:

grep [^0-9]
这将匹配任何非数字字符,而不是仅由数字组成的字符串。

类似以下内容:

if [[ "xf44wd" =~ [0-9]+ ]]; then
    echo "contains $?"
    else
    echo "does no contains $?"
fi


只需使用
bash
模式匹配:

[[ "$MY_VAR" =~ ^[^0-9]+$ ]] && echo "no digit in $MY_VAR"
另一个选项是bash“包含”检查


如果第一个字符是数字,大多数建议返回true,但在字符串中找不到错误。如果整个字符串为数字,则下面的函数返回true;如果在字符串中检测到任何非数字,则返回false

function isdigit () {
   [ $# -eq 1 ] || return 1;
   [[ $1 = *[^0-9]* ]] && return 1
   return 0
}

您需要^和$吗?如果匹配任何非数字,则为失败。
=~
是什么意思?我们可以使用字符类,
[:digit://code>?然后如果是数字$1,则可以使用类似于
;然后回声“是数字”;否则重复“不”;fi
[[ "xf4fgh" = *[^0-9]* ]]
echo $?
0
[[ "1234" = *[^0-9]* ]]
echo $?
1
function isdigit () {
   [ $# -eq 1 ] || return 1;
   [[ $1 = *[^0-9]* ]] && return 1
   return 0
}