曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4361|回复: 0
打印 上一主题 下一主题

let -- 对参数进行求值运算

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-5-30 16:52:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
let 是 shell 的内置命令。它的使用方式是:
let: let arg [arg ...]
let 将参数当作算术表达式进行计算。在计算过程中,它并不检查溢出,但对于除以0 这种行为会发出错误提示。比如:
[beyes@localhost ~]$ let x=10 y=x/0; echo $? $x $y
bash: let: y=x/0: division by 0 (error token is "0")
1 10

下面是 let 支持的运算符,每组中的运算符具有相同的优先级,不同组的运算符的优先级从高到低排列:
        id++, id--    运算后加,运算后减
        ++id, --id    运算前加,运算前减
        -, +        一目减,一目加 (x=-10, -x 为 10)
        !, ~        逻辑非,按位反
        **        乘方
        *, /, %       乘,除,求余
        +, -        加法,减法
        <<, >>        按位左移,按位右移
        <=, >=, <, >    大小比较
        ==, !=        相等,不等
        &        按位与
        ^        按位异或
        |        按位或
        &&        逻辑与
        ||        逻辑或
        expr ? expr : expr   条件操作
        =, *=, /=, %=,
        +=, -=, <<=, >>=,
        &=, ^=, |=    
示例-1(id++, id--, --id, ++id 运算符)
[beyes@localhost ~]$ let x=-10 y=x+++10 ; echo $x $y
-9 0
[beyes@localhost ~]$ let x=-10 y=--x+10 ; echo $x $y
-11 -1

示例-2(逻辑非)
[beyes@localhost ~]$ let x=10 x=!x; echo $x
bash: !x: event not found             // ! 符号面前需要用转义字符,见下:
[beyes@localhost ~]$ let x=10 x=\!x; echo $x
0
[beyes@localhost ~]$ let x=0 x=\!x; echo $x
1
像底下的一些“与”,“或”,“异或”等符号也需要在前面加上转义符,或者将整个表达式用双引号括起来。

示例-3(这里比较 & 和 | 的优先级):
[beyes@localhost ~]$ let x=0x55 y=0xaa z=x\|y\&0; echo  $x $y $z
85 170 85
[beyes@localhost ~]$ let x=0x55 y=0xaa "z=x|170"; echo  $x $y $z
85 170 255

另外,shell 里的变量也可以参与到运算中来,实际上用的是变量值进行计算:
[beyes@localhost ~]$ x=$UID; echo $x
500
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 19:48 , Processed in 0.072455 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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