我正在努力解决黑客行为问题。
If n is odd, print Weird
If n is even and in the inclusive range of 2 to 5, print Not Weird
If n is even and in the inclusive range of 6 to 20, print Weird
If n is even and greater than 20, print Not Weird
我的代码如下:
read n
if [ $n%2==0 ]; then
if [ $n -ge 6 ] && [ $n -le 20 ]; then
echo "Weird"
else
echo "Not Weird"
fi
else
echo "Weird"
fi
当我将输入设为3
时,我得到的结果是Not Weird
,这对于1
来说是不正确的,我得到的并不奇怪。但是,当我尝试这个时:
read n
if [ $(($n%2)) -eq 0 ]; then
if [ $n -ge 6 ] && [ $n -le 20 ]; then
echo "Weird"
else
echo "Not Weird"
fi
else
echo "Weird"
fi
我得到了正确的结果。有什么区别?
答案 0 :(得分:2)
[
]
(或test
)内置:
==
或符合POSIX =
,执行字符串比较
-eq
进行数字比较
注意:==
和-eq
(和其他比较)是{em>参数到[
命令,因此必须由空格分隔,因此$n%2==0
无效。
[[
]]
关键字:
为[
,只是它进行模式匹配。作为关键字而非内置关键字,在{x}中进行扩展会在扫描的早期完成。
[[
((
语法
与内置))
一样进行算术评估。空格分隔符不是强制性的。不需要使用前导let
来扩展变量,因为它会更改扩展顺序,所以不建议这样做。
答案 1 :(得分:0)
对于my $str = "foo95285734776bar";
$str =~ s/([0-9]{2,4})/_????_/g;
内的真值评估,if-else
为bash
运算符提供了前面不需要((..))
的操作。
$
阅读here了解详情。