Bash 如何检查是否设置了需要包含数字的变量?

Bash 如何检查是否设置了需要包含数字的变量?,bash,Bash,给定以下代码: Max= if [[ something exists.. ]]; then Max=2 // .. more code that can changes the value of Max fi // HERE 如果最大值等于某个数字(设置),我如何在“此处”进行检查?酷 Max默认设置为空值,在算术上下文中使用时返回零。例如: 试着运行echo$((definitelynogivename))结果为零,酷 您可以使用圆括号进行算术比较-请参阅更多和 或 请注意,第二

给定以下代码:

Max=
if [[ something exists.. ]]; then
     Max=2
// .. more code that can changes the value of Max
fi
// HERE
如果最大值等于某个数字(设置),我如何在“此处”进行检查?

Max默认设置为空值,在算术上下文中使用时返回零。例如:

试着运行
echo$((definitelynogivename))
结果为零,酷

您可以使用圆括号进行算术比较-请参阅更多和


请注意,第二个示例是进行字符串比较,这可以解决一些难题,但可能会伤害纯粹主义者的敏感性。

我不知道您使用的是哪个shell,但是
bash
绝对不会将vars默认为零。@keithpjolley,在算术上下文中,它是空字符串(展开未设置变量的结果)在这种上下文中被视为具有零值(当未加引号--
$($empty))
的计算结果为0,
$(“$empty”)
是一个错误).修正了yaNeat的措辞!我不知道。注意,
-a
在POSIX测试标准中被标记为已过时;参见中的
OB
标记,
=
是字符串比较器,也许你想要
-eq
5
05
不同可以吗?我找到了最纯粹的。:)@ghoti-
=
是为了防止出现类似
Max=five
的情况。我假设
一些_编号
是硬编码到脚本中的,而不是用户输入。有时,重要的是--
测试
使用逻辑and、OR和括号来控制操作顺序是过时的,这是有充分理由的。考虑< <代码> a=”(“< /代码>和<代码> b=”)< <代码>;是询问
是否为同一个字符(false!),还是测试
=
是否为非空字符串(true!)的分组操作?为了便于解释,这一特殊的情况很简单,但也存在更恶劣的变体<代码>[[]]没有问题——因为语法,它知道哪些单词是从变量展开的,哪些是表达式的一部分。
if [ -z "$Max" ]
then
  echo "Max: not set"
else if [ $Max -eq some_number ]
then
  echo "Max is equal to some number"
else
  echo "Max is set but not equal to some number"
fi
if [ -n "$Max" -a "$Max" = "some_number" ]
...