weixin_39983554
weixin_39983554
2021-01-01 07:39

翻译的原文中本身有错误

GitHub : published/20180417 How to do math on the Linux command line.md LXCN : Linux 命令行下的数学运算 https://linux.cn/article-9642-1.html

  1. expr 段落中,用了 expr "11" = "11" 来举字符串比较的例子,但实际上大部分 Shell,包括 Bash 和 dash,引号具有语义,这样运行在 exec 的时候是不存在引号的。 expr "11" = "011" 也会返回 1,只有写成 expr '"11"' = '"011"' 才返回 0。
  2. 在“简单的 bash 数学运算”一节,例子是对的,用了 ** 当幂运算符号,但后面说

    ^ 指数运算

这就不对了,^ 表示的是“按位异或”。 3. 没有关于为什么星号(*)前加反斜杠(\)的说明。“防止语法错误”是你做了什么,“加反斜杠”是你如何做到这件事的,而“星号是匹配对于当前活动目录所有文件的通配符”并且“反斜杠阻止了这一行为”是为什么这么做。只有谈到为什么才能让读者更好地明白 Shell。在后面甚至完全没有 > 前加反斜杠的任何描述。

另外,也已向原文通过 Facebook 提出:

  1. in example of expr there shows expr "11" = "11" as a comparison between strings, but in most shells like bash or dash, " is used to mark boundary of argv's, so they are not interpreted as string. for illustration, expr "11" = "011" will also return true You MUST write expr '"11"' = '"011"' to get a false.
  2. in "easy bash math" section, the code in example is good: ((e=e2)), that is exponent, however, you then said ^ Get exponent. ^ is NOT for exponent, but for bit-wise XOR. is the correct sign for exponent.
  3. there is no description about WHY asterisk (*) cannot be there without an backslash (\). "avoid the syntax error" is WHAT you do, "adding a backslash" is HOW you do it, and "asterisk is a glob to all files in current working directory" and "backslash prevents this behavior" is WHY you do it. Only to the WHY part can you let your reader know better about the shell. To make matters worse there is even no explanation about ">" sign.

该提问来源于开源项目:LCTT/TranslateProject

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • weixin_39961943 weixin_39961943 3月前

    确实是,画蛇添足了,删除比较好。

    点赞 评论 复制链接分享
  • weixin_39961943 weixin_39961943 3月前

    谢谢您的指正,我来看看看如何修正。

    点赞 评论 复制链接分享
  • weixin_39961943 weixin_39961943 3月前

    仔细看过这篇,并针对您的意见,我有如下考虑:

    1. 本文中提及不要用 " 来引起来数字进行比较,我觉得就是因为你提及的 bash 中引号的这种行为容易混淆,所以,只要不用引号即可,此处就不对引号该怎么用展开了。
    2. ^ 指数运算 是用在 bc 中的操作符,而非 bash 内置操作符。这一点确实应该澄清。
    3. 本文确实没有对 bash 特殊字符转义进行解释。应该适当解释。

    以上意见我已经部分落实到译文当中。谢谢您。

    点赞 评论 复制链接分享
  • weixin_39983554 weixin_39983554 3月前

    如果将数字放到引号中间,那么你将进行字符串比较,而不是数值比较。

    这一行和下面的4行例子一并删去比较好吧……一来例子还是没有意义的,二来比较容易混淆,要说清楚基本上是要把 Shell 的引号使用说一遍了。

    当然真想要说清楚也可以,但未免冗余,不妨找一个外部链接?或者以前的文章?

    点赞 评论 复制链接分享