【发布时间】:2020-03-28 18:01:43
【问题描述】:
我为解决挑战而编写的代码一直给我一个“真”的响应,我不知道为什么。我已经使用了语法并且一直得到“True”,所以我可能对 Bash 的工作方式有些不理解。
如果这太简单或存在类似问题,我深表歉意。我看了但不知道如何表达这个问题。
输入的测试值是 n=3 x=3 y=4(说真,应该是假)和 n=12 x=3 x=4(没有达到测试的这个点。
#!/bin/bash
read n
echo "n is " $n
read x
echo "x is " $x
read y
echo "y is " $y
if [[ ((n%x==0 && n%y==0)) ]]; then
echo "true"
else
echo "false"
fi
【问题讨论】:
-
这是检查
((n%x==0和n%y==0))是否为空字符串。他们从来都不是,所以总是真实的。((在一般上下文中被解析器识别,但在 conditional expression 内不识别。 -
顺便说一句,将参数扩展保留在引号内。
echo "n is $n",不是echo "n is" $n;在这里并没有太大的区别,但它会在这些值可能包含 IFS 中的字符或兼作 glob 的上下文中;见BashPitfalls #14。 -
(使用
-r参数到read也是一个好习惯,除非您有特定的理由不这样做;read -r x和read -r y减少用户的修改/转换在将其分配给命名变量之前输入)。
标签: bash