Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Ansen
V2EX  ›  Linux

求助~最大公约数脚本,大小随意赋值给变量的问题

  •  
  •   Ansen · Jan 7, 2015 · 2675 views
    This topic created in 4178 days ago, the information mentioned may be changed or developed.
    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
    4 replies    2015-01-08 18:14:02 +08:00
    Ansen
        1
    Ansen  
    OP
       Jan 7, 2015
    貌似找着问题了……
    remainder=$dividend % $divisor=10 % 20 =0 这计算错误了。。囧
    vinceguo
        2
    vinceguo  
       Jan 8, 2015   ❤️ 1
    ABS...
    我当初在平板上看那本书的时候感觉实在是蛋疼。
    那语法实在是太丑了,还乱得很。可能有历史的原因,也可能需要考虑到对各种东西的兼容。
    Anyway,前段时间发现Bash那个漏洞的是Stéphane Chazelas发现的,你在书里面应该看到这名字很多次了吧,里面不少代码是他贡献的。
    我学bash后唯一的应用就是实现了一个经典的处理算术表达式的算法:先把算术表达式变成逆波兰表示,然后再计算,最漂亮的是这两步都只用了一个非常基础的数据结构:栈。后来才知道是鼎鼎大名的Dijkstra提出来的shutting yard算法。如果你想看代码的话: http://www.vinceguo.me/blogs/calculator/calc.sh.tar.gz

    好吧,说了这一堆不相关的废话。
    Ansen
        3
    Ansen  
    OP
       Jan 8, 2015   ❤️ 1
    @vinceguo 感谢分享,以我现在的水平,够我研究一段时间了
    vinceguo
        4
    vinceguo  
       Jan 8, 2015   ❤️ 1
    @Ansen 研究个毛线。你有兴趣的话直接找算法去实现还好一些。我最烦的就是看别人的代码。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1036 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 22:47 · PVG 06:47 · LAX 15:47 · JFK 18:47
    ♥ Do have faith in what you're doing.