新浪网

Zsh 开发指南(七):数值计算

Linux中国

关注

确定不再关注此人吗

Zsh 开发指南(七):数值计算

数值计算并非 zsh 的强项,但应付一些简单的场景还是没问题的。并且 zsh 提供一个数值计算库,里边有一些比较常用的数学函数。-- 陌辞寒

本文导航◈ 导读01%◈ 整数和浮点数类型03%◈ 运算符20%◈ 数学函数66%◈ 参考94%转载自 | http://www.jianshu.com/p/611dfc227018 作者 | 陌辞寒

导读

数值计算并非 zsh 的强项,但应付一些简单的场景还是没问题的。并且 zsh 提供一个数值计算库,里边有一些比较常用的数学函数。

[1]整数和浮点数类型

Zsh 中通常不用指定变量类型,但也可以指定。对数值计算来说,区分整数和浮点数是很重要的,不指定变量类型会带来不方便。

# 整数

% integer i=123

# (t) 用于输出变量类型

% echo ${(t)i}

integer

# 浮点数

% float f=123.456

% echo ${(t)f}

float

# 注意一旦指定了变量类型,类型就不会变了,除非再重新指定其他类型,或者用 unset 删除掉

# 如果把浮点数赋值给整数变量,会取整

% i=12.34

% echo $i

12

% a=-12.34

% echo $a

-12

# 整数是 64 位的带符号整数(在 32 位系统下也是)

% echo $((-2 ** 63)) $((2 ** 63 - 1))

-9223372036854775808 9223372036854775807

# 浮点数是 64 位带符号浮点数(在 32 位系统下也是)

% echo $((-1.79e-308)) $((1.79e308))

-1.79e-308 1.79e+308

[2]运算符

数值计算主要是在 (( )) 或者 $(( )) 中进行的,在 $[ ] 或者 $var[ ](可用于数组索引的计算)中也能进行一部分,这里统一使用小括号。

% integer i=123

% float f=123.456

# $(( )) 会计算后返回数值

% echo $((i*f))

15185.088

# (( )) 用于判断数值比较的结果

% ((i < f && i + 1 > f)) && echo good

# 在 (( )) 中也可以给变量赋值

# (( )) 中的语法类似 c 语言,变量名前不需要 $,等号两边可以有空格

% float result

% ((result = i / f))

% echo $result

9.963063764e-01

运算符列表:

< 如显示不全,请左右滑动 >

  • + - * /四则运算1 + 2 * 3 / 4
  • **乘方3 ** 3.5
  • %取余5 % 3
  • ++ --自增、自减i++(返回 i) ++i(返回 i + 1)
  • & | ^按位与、按位或、按位异或11 & 13
  • ~按位取反~15
  • << >>按位左移、按位右移1 << 3
  • < <= > >=大小比较2 <= 4
  • == !=相等比较2 != 4
  • && ||逻辑与、逻辑或2 <= 4 && 1 != 3 || 5 > 0
  • !逻辑非! 1 > 2
  • ^^逻辑异或(两个中只有一个为真)1 > 0 ^^ 1 < 0
  • =赋值i = 10
  • += -= *= /= %= **=

    &= ^= |= <<= >>=

    &&=^^= ||=

    复合赋值i += 10
  • ( )调整优先级(1 + 2 ) * 3
  • ? :三元运算符1 > 2 ? 100 : 200
  • ,逗号运算符(只返回后者)40, 20 == 20
  • 运算符
  • 功能
  • 样例

运算符的优先级和其他编程语言的差不多,不列出了,如果不确定可以加小括号。这部分内容和 c、java、javascript 等语言基本一致。

[3]数学函数

Zsh 包含了一个数学模块,如果需要使用数学函数,需要先加载 zsh/mathfunc 模块。

% zmodload -i zsh/mathfunc

% echo $((sin(0) + ceil(14.4)))

15.0

函数列表:

< 如显示不全,请左右滑动 >

  • abs求绝对值
  • ceil向上取整
  • floor向下取整
  • int截断取整
  • float转换成浮点数
  • sqrt开平方
  • cbrt开立方
  • log自然对数
  • log10常用对数
  • rand48随机数
  • 函数名
  • 功能

更多函数:

acos、acosh、asin、asinh、atan、atanh、cos、cosh、erf、erfc、exp、 expm1、fabs、gamma、j0、j1、lgamma、log1p、logb、sin、sinh、tan、 tanh、y0、y1、ilogb、signgam、copysign、fmod、hypot、nextafter、jn、 yn、ldexp、scalb

[4]参考

http://www.bash2zsh.com/zsh_refcard/refcard.pdf

特别声明:以上文章内容仅代表作者本人观点,不代表 新浪网观点或立场。如有关于作品内容、版权或其它问题请于作品发布后的30日内与 新浪网联系。
杭铁回应地铁口被吐槽像棺材391万
科学家或发现外星生命存在最有力证据355万
认养一头牛称暂不考虑撤掉广告351万
美国人来华扫货消费金额短期暴涨345万
减肥要熬过这4个时间点329万
一家人出门没拔充电器家里被烧光323万
查看全部实时热点
请输入评论内容

举报成功

举报

请您选择举报的原因
打开APP
意见/建议 反馈入口
  • TOKEN
  • 标题/昵称
  • 反馈内容

已反馈成功~

意见/建议 反馈入口
  • TOKEN
  • 标题/昵称
  • 反馈内容

已反馈成功~