为什么这个bash脚本总是评估为false

时间:2016-04-18 04:04:30

标签: bash sh

我试用我的第一个bash脚本只是为了通过另一个脚本运行一些文件并检查答案。

for i in tests/*;
do
  if [ "${i: -2}" != ".a" ] ; then
    A=`cat "$i" | python3 blah.py`
    B=`cat "$i.a"`
    if (("$A" == "$B")); then
      printf "Passed $i\n\n"
    else
      echo "Failed $i:"
      echo "Calculated Answer: $A"
      printf "   Correct Answer: $B\n\n"
    fi
  fi
done

似乎无论我如何处理这个脚本,我得到的输出如下:

Failed tests/23:
Calculated Answer: 33334
   Correct Answer: 33334

我的计算答案与给定答案相同,但剧本会说我失败了。

1 个答案:

答案 0 :(得分:0)

为我工作,所以也许是你的bash版本,请小心。我在OSX上:

bash --version
> GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
> Copyright (C) 2007 Free Software Foundation, Inc.
A="1"
B="1"
if (("$A" == "$B")); then
    printf "Passed $i\n\n"
else
    echo "Failed $i:"
    echo "Calculated Answer: $A"
    printf "   Correct Answer: $B\n\n"
fi
> Passed
A="1"
B="2"
if (("$A" == "$B")); then
    printf "Passed $i\n\n"
else
    echo "Failed $i:"
    echo "Calculated Answer: $A"
    printf "   Correct Answer: $B\n\n"
fi
> Failed :
>    Calculated Answer: 1
>    Correct Answer: 2

有一点突出的是反对派。我通常不会使用()表示if,只是[]或[[]](声明中的空格很重要)。我不知道什么时候重要,如果我只是使用[]因为它可能向后兼容旧/ bin / sh环境。但尝试更换它们。另外,printf?老实说,我不知道你可以使用它,我总是使用echo。 :)哦,它有效:

if [[ "$A" == "$B" ]]; then
    printf "Passed $i\n\n"
else
    echo "Failed $i:"
    echo "Calculated Answer: $A"
    printf "   Correct Answer: $B\n\n"
fi

尝试以上操作,并告诉我们您正在使用的bash / sh /其他解释器的版本。