我试用我的第一个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
我的计算答案与给定答案相同,但剧本会说我失败了。
答案 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 /其他解释器的版本。