技术解析

求助~最大公约数脚本,大小随意赋值给变量的问题
0
2021-07-14 06:00:46
idczone
advnced bash中的一个例子提到

我的推导过程
dividend=10
divisor=20
until里面的运算步骤为
remainder=$dividend % $divisor=10 % 20 =0
dividend=$divisor=20
remainder等于0了,循环结束,那么结果为$dividend=20?
明显不对呀?

附上脚本源码
#!/bin/bash

ARGS=2
E_BADARGS=65

if [ $# -ne "$ARGS" ]
then
echo "Usage: `basename $0` first-number second-number"
exit $E_BADARGS
fi

gcd ()
{
dividend=$1
divisor=$2

remainder=1

until [ "$remainder" -eq 0 ]
do
let "remainder = $dividend % $divisor"
dividend=$divisor
divisor=$remainder
done
}

gcd $1 $2

echo; echo "GCD of $1 and $2 = $dividend"; echo

exit 0
貌似找着问题了……
remainder=$dividend % $divisor=10 % 20 =0 这计算错误了。。囧

ABS...
我当初在平板上看那本书的时候感觉实在是蛋疼。
那语法实在是太丑了,还乱得很。可能有历史的原因,也可能需要考虑到对各种东西的兼容。
Anyway,前段时间发现Bash那个漏洞的是Stéphane Chazelas发现的,你在书里面应该看到这名字很多次了吧,里面不少代码是他贡献的。
我学bash后唯一的应用就是实现了一个经典的处理算术表达式的算法:先把算术表达式变成逆波兰表示,然后再计算,最漂亮的是这两步都只用了一个非常基础的数据结构:栈。后来才知道是鼎鼎大名的Dijkstra提出来的shutting yard算法。如果你想看代码的话: http://www.vinceguo.me/blogs/calculator/calc.sh.tar.gz
好吧,说了这一堆不相关的废话。

感谢分享,以我现在的水平,够我研究一段时间了

研究个毛线。你有兴趣的话直接找算法去实现还好一些。我最烦的就是看别人的代码。。。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服