Bash-为什么是;0“;是否不被识别为数字?

Bash-为什么是;0“;是否不被识别为数字?,bash,Bash,我发现了一个有趣的Bash脚本,它将测试变量是否为数值/整数。我喜欢,但我不明白为什么“0”不能被识别为数字?我不能问作者,hi/shi是匿名者 #!/bin/bash n="$1" echo "Test numeric '$n' " if ((n)) 2>/dev/null; then n=$((n)) echo "Yes: $n" else echo "No: $n" fi 谢谢大家! 更新-2012年4月27日。 这是我的最终代码(简短版本): 它不测试它是否是数字/整数。它测

我发现了一个有趣的Bash脚本,它将测试变量是否为数值/整数。我喜欢,但我不明白为什么“0”不能被识别为数字?我不能问作者,hi/shi是匿名者

#!/bin/bash

n="$1"

echo "Test numeric '$n' "
if ((n)) 2>/dev/null; then
n=$((n))
echo "Yes: $n"
else
echo "No: $n"
fi
谢谢大家!

更新-2012年4月27日。

这是我的最终代码(简短版本):


它不测试它是否是数字/整数。它测试n的计算结果是真还是假,如果0为假,否则(数字或其他字符串)为真。

它不测试它是否为数字/整数。它测试n的计算结果是否为真或假,如果0为假,否则(数字或其他字符串)为真。

用于测试:

这将不匹配一个负整数,它将错误地匹配一个空字符串作为数字。要获得更精确的模式,请启用shell的扩展全局绑定:

shopt -s extglob
if [[ $n == ?(-)+([0-9]) ]]; then echo numeric; else echo "not numeric"; fi
和一个小数匹配

[[ $n == @(?(-)+([0-9])?(.*(0-9))|?(-)*([0-9]).+([0-9])) ]]
用于测试:

这将不匹配一个负整数,它将错误地匹配一个空字符串作为数字。要获得更精确的模式,请启用shell的扩展全局绑定:

shopt -s extglob
if [[ $n == ?(-)+([0-9]) ]]; then echo numeric; else echo "not numeric"; fi
和一个小数匹配

[[ $n == @(?(-)+([0-9])?(.*(0-9))|?(-)*([0-9]).+([0-9])) ]]
可能的重复可能的重复