LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: kiron

高级Bash脚本编程指南(Advanced Bash-Scripting Guide):[最新]中文正式3.9.1版发布

[复制链接]
发表于 2006-8-20 21:40:23 | 显示全部楼层
学习Shell 和Perl中,打算将文档打印成册以方便查看
再次感谢译者.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-21 02:02:54 | 显示全部楼层
Post by huyongzs
第三章有个错误

那个分号写错了吧?

首先,要多谢你能提这个“错误”。

原文如下:
  1. ;
  2. Command separator [semicolon].
复制代码


我将它译成:
  1. ;
  2. 命令分隔符[分号].
复制代码


这一章的格式都是如此,比如:
  1. ;;
  2. case语句分支的结束符[双分号].
复制代码


我猜测是因为这种表达方式不太直观,以使人误认为译文中的“[分号]”是指"["或是"]",我认为会存在这样的误解,我将此记下,或许在修正版中,我会写成:
  1. ;
  2. 命令分隔符[分号, 即;].
复制代码

应会更直观些。

希望更多的人找出错误通知我们,我会继续追踪这个帖子,即便是错别字,也非常欢迎提出。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-21 02:40:05 | 显示全部楼层
Post by KevinChen
在第26章--数组的部分--埃拉托色尼素数筛子的代码中

  1. 64 let i=$LOWER_LIMIT+1
  2. 65 # 我们都知道 1 是素数, 所以我们从 2 开始.
  3. 66  
  4. 67 until [ "$i" -gt "$UPPER_LIMIT" ]
  5. 68 do
  6. 69  
  7. 70 if [ "${Primes[i]}" -eq "$PRIME" ]
  8. 71 # 不要处理已经过滤过的数字 (被标识为非素数).
  9. 72 then
  10. 73  
  11. 74   t=$i
  12. 75  
  13. 76   while [ "$t" -le "$UPPER_LIMIT" ]
  14. 77   do
  15. 78     let "t += $i "
  16. 79     Primes[t]=$NON_PRIME
  17. 80     # 标识为非素数.
  18. 81   done
复制代码


第64跟65行有问题,首先1不是素数,而且,如果这个算法从1开始算起,肯定没有答案。从2开始肯定不是注解上的原因

还有SPLIT的这个变量没有用过,应该再用在第70行,把那个$UPPER_LIMIT,改成$SPLIT

目前看的最大的BUG,其他的翻译一些错误可能是打字时出错,但是无关痛痒,都看得懂
但是这个BUG是有误导的意思
不知道写的对不对,但是希望有人能看到



多谢兄弟打了这么多字,我来解释一下:
第64跟65行有问题,首先1不是素数,而且,如果这个算法从1开始算起,肯定没有答案。从2开始肯定不是注解上的原因

素数(也叫质数)的定义大家都清楚:只能被1和它自已本身整除的整数(一般指正整数)。
我依稀记得小学的课本中指明1非合数也非质数的说法,也听说过素数另一个定义:大于1的自然数中只能被1和它自己本身整除的数叫素数。
之所以会加上一个限定:大于1的自然数。我听说是因为数学家后来为了证明某些定理的成立,把这个限定加上去的。具体的来龙去脉,我非专业人士,不得而知。但我在网上GOOGLE到一篇文章:http://www.teach8.net/runwen/gzjyrw/gzsxrw/200608/4334.html
说明了一些情况,可做参考,大家自行判断。

回来译文来说一下。
原文64和65行如下:
  1.   64 let i=$LOWER_LIMIT+1
  2.   65 # We know 1 is prime, so let's start with 2.
复制代码


译文如下:
  1.   64 let i=$LOWER_LIMIT+1
  2.   65 # 我们都知道1是素数, 所以我们从2开始.
复制代码

1是否是素数,这个我已无法下定论了,因为可能数学界也是没个定论。从本文的原作者的意思上来看,1是素数。从2开始过滤素数是作者的原意。如此联系推看,这种译法还是比较合理的,也没有误导的问题存在。并且原作者的算法也是对的。
还有SPLIT的这个变量没有用过,应该再用在第70行,把那个$UPPER_LIMIT,改成$SPLIT


原文中提到这个变量时说明如下:
  1.   17 let SPLIT=UPPER_LIMIT/2
  2.   18 # Optimization:
  3.   19 # Need to test numbers only halfway to upper limit (why?).
复制代码

译文如下:

  1.   17 let SPLIT=UPPER_LIMIT/2
  2.   18 # 优化:
  3.   19 # 只需要测试中间到最大之间的值 (为什么?).
复制代码


原作中有效的代码中此变量的确没有用过,如上的这句,我推测作者的用意是让读者思考为何只用检测一半的值就可以了?并没有使用此变量的含义。
而你上面所做的修改应是恰好做了此种优化(上面你提的改过的方法应和后面那个算法版本(107行之后的算法)是一样的)。到了目前的4.0最新的ABS版本,这个例子还是如此安排。我认为原文和译文也是没有错的。

如果还有不妥之处,也请兄弟继续指正。多谢。
回复 支持 反对

使用道具 举报

发表于 2006-8-21 11:04:13 | 显示全部楼层
我是新手  多多向你们学习
回复 支持 反对

使用道具 举报

发表于 2006-8-22 08:54:20 | 显示全部楼层
1是否是素数,这个我已无法下定论了,因为可能数学界也是没个定论。从本文的原作者的意思上来看,1是素数。从2开始过滤素数是作者的原意。如此联系推看,这种译法还是比较合理的,也没有误导的问题存在。并且原作者的算法也是对的。

先不考虑1是不是素数,算法的从2开始不能因为1是不是素数而决定,而是因为如果从1开始,原著的算法就不成立,所以我觉得注释有点不妥

算法的核心思想就是从2开始,去掉以后每个数的倍数,所以才会有SPLITE=UPPLIMIT/2,这个优化算法,但是如果从1开始,所有的数都会被排除掉
可能有点钻牛角,但是还是觉得这样的注释还是不是很妥当
回复 支持 反对

使用道具 举报

发表于 2006-8-25 18:09:15 | 显示全部楼层
太好了,要顶的!
回复 支持 反对

使用道具 举报

发表于 2006-8-25 21:18:10 | 显示全部楼层
感谢翻译者的付出与努力!
回复 支持 反对

使用道具 举报

发表于 2006-8-26 15:18:29 | 显示全部楼层
哪里有纸质的书卖,想买一本
回复 支持 反对

使用道具 举报

发表于 2006-8-26 15:26:48 | 显示全部楼层
Post by jiangjianhong
想请问终极幻想兄,什么是“LFS”?为什么“别用 RedHat 9 了”?,请指教。有别的好心人知道的也请帮忙解答,谢谢!


我觉得LFS是Line Field Separator, 比如说PATH中的":"冒号
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-27 18:25:34 | 显示全部楼层
Post by KevinChen
先不考虑1是不是素数,算法的从2开始不能因为1是不是素数而决定,而是因为如果从1开始,原著的算法就不成立,所以我觉得注释有点不妥

算法的核心思想就是从2开始,去掉以后每个数的倍数,所以才会有SPLITE=UPPLIMIT/2,这个优化算法,但是如果从1开始,所有的数都会被排除掉
可能有点钻牛角,但是还是觉得这样的注释还是不是很妥当


多谢兄弟,我也认同这一点,为了忠实原著,我不会更改译文,但我考虑在此处加入译注字样作一些解释
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表