【发布时间】:2010-12-24 08:16:51
【问题描述】:
在与this question 相同的线程中,我再试一次,并要求 SO 帮助解决我应该如何处理这个问题。我正在编写一个需要执行以下操作的 bash 脚本:
- 我在
x和y中有一个圆,半径为r。 - 我指定
resolution,这是我正在检查的点之间的距离。 - 我需要遍历 x 和 y(从 -r 到 r)并检查当前 (x,y) 是否在圆圈中,但我需要遍历离散的
i和j。 - 那么
i和j需要从-r/resolution转到+r/resolution。 - 在循环中,需要发生的是
echo "some_text i*resolution j*resolution 15.95 cm"(注意缺少$,因为我一无所知)。这个输出是我真正想要的。
迄今为止我最好的一击:
r=40.5
resolution=2.5
end=$(echo "scale=0;$r/$resolution") | bc
for (( i=-end; i<=end; i++ ));do
for (( j=-end; j<=end; j++ ));do
x=$(echo "scale=5;$i*$resolution") | bc
y=$(echo "scale=5;$j*$resolution") | bc
if (( x*x + y*y <= r*r ));then <-- No, r*r will not work
echo "some_text i*resolution j*resolution 15.95 cm"
fi
done
done
我已经受够了 bash,可能会像我上一个问题中有人建议的那样研究 ksh,但如果有人知道执行此操作的正确方法,请告诉我!无论如何解决这个问题,它肯定会让我未来的气质转向 bash 脚本。
【问题讨论】:
-
感谢您的帮助;我会在早上几个小时回来更新和回复。
-
ksh ?拜托……情况越来越糟了。我的观点是你使用了错误的工具。 shell 应该是用来运行程序的,而不是用来做数学的。
-
我有项目负责人坚持以前所有事情都必须在 shell 中完成,因为“没有人知道 perl”。有时,你只需要让它在你被给予的约束下工作。即使这些限制条件不健全。
-
另一方面,例如,如果您被要求在汇编程序中生成代码,这看起来像是一个疯狂的约束,但这可能有一个动机背景(与以前的代码集成、时序问题)。这很疯狂,因为不常见,要求很高,很难测试,也很难做到,但在这种情况下,这并不是不合理或没有动力的。我同意,人为因素确实存在,并且必须予以充分考虑,但这始终是一个平衡问题。一个好的经理应该知道什么时候改进他的团队的技术,否则他会停留在旧的技术中。
-
如果人们坚持你使用 shell 做数学,我会挖出 dc.sed 并说“你是什么意思,你不知道 sed”? sed.sourceforge.net/grabbag/scripts/dc.sed