【问题标题】:BASH If conditional always returns "True" [duplicate]BASH如果条件总是返回“真”[重复]
【发布时间】: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==0n%y==0)) 是否为空字符串。他们从来都不是,所以总是真实的。 (( 在一般上下文中被解析器识别,但在 conditional expression 内不识别。
  • 顺便说一句,将参数扩展保留在引号内。 echo "n is $n",不是echo "n is" $n;在这里并没有太大的区别,但它会在这些值可能包含 IFS 中的字符或兼作 glob 的上下文中;见BashPitfalls #14
  • (使用-r 参数到read 也是一个好习惯,除非您有特定的理由不这样做;read -r xread -r y 减少用户的修改/转换在将其分配给命名变量之前输入)。

标签: bash


【解决方案1】:

摆脱不必要的[[]]。您的新 if 语句将类似于 if ((n%x==0 && n%y==0))

【讨论】:

    猜你喜欢
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2016-09-13
    相关资源
    最近更新 更多