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" ]
...