【发布时间】:2018-12-14 05:05:16
【问题描述】:
给定以下代码:
Max=
if [[ something exists.. ]]; then
Max=2
// .. more code that can changes the value of Max
fi
// HERE
如果 Max 等于某个数字(已设置),我如何在“此处”检查?
【问题讨论】:
标签: bash
给定以下代码:
Max=
if [[ something exists.. ]]; then
Max=2
// .. more code that can changes the value of Max
fi
// HERE
如果 Max 等于某个数字(已设置),我如何在“此处”检查?
【问题讨论】:
标签: bash
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" ]
...
请注意,第二个示例是进行字符串比较,它可以解决一些令人头疼的问题,但可能会伤害纯粹主义者的敏感性。
【讨论】:
-a 在 POSIX 测试标准中被标记为过时;查看pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html 中的OB 标记
= 是一个字符串比较器,也许你想要-eq。 5 与 05 不同可以吗?
= 是为了防范类似Max=five 的东西。我假设some_number 被硬编码到脚本中,而不是用户输入。
test 允许逻辑 AND、OR 和括号控制操作顺序的使用已过时,这是有充分理由的。考虑a='('和b=')';是[ "$a" = "$b" ] 询问( 和) 是否是同一个字符(假!),还是分组操作测试= 是否为非空字符串(真!)?为了便于解释,那个特殊的极端案例是一个简单的案例,但存在更糟糕的变体。 [[ ]] 没有问题——作为语法,它知道哪些词是从变量扩展而来的,哪些是表达式的一部分。