bash 运算表达式求值 test, [],[[]]

原创 2013年12月04日 12:55:06
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bash 逻辑运算表达式值 test , [], [[]]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

test 与 [] 是等价的, [[]] 是对[] 的功能扩充,但老版本的bash或精简版bash可能不支持。

****************************************
test 测试, 逻辑运算府区分字符串与数字
****************************************
----------------------------------------
[root@hjj ~]# test 1=2 && echo ok
ok
错误原因,运算符两边必须用空格分开,不能连在一起
而let 语句为变量赋值则=两边不能由空格
----------------------------------------

========================================
test 测试 =, 实际是字符串比较
========================================
[root@hjj ~]# test 1 = 1 && echo ok
ok
[root@hjj ~]# test 1 = 2 && echo ok
[root@hjj ~]# test a = b && echo ok
[root@hjj ~]# test a = a && echo ok
ok


========================================
test 测试 eq 只能用于整数比较
========================================
[root@hjj ~]# test 1 -eq 1 && echo ok
ok
[root@hjj ~]# test 1 -eq 2 && echo ok
[root@hjj ~]# test a -eq a && echo ok
bash: test: a: integer expression expected

****************************************
精简表达式 [ ] , 可以取代test
****************************************
============================================================
[] 测试<, > 要加转以符\,  <, > 字符串
============================================================

----------------------------------------
错误原因: < 号前没有加\
ot@hjj ~]# [ 1 < 2 ] && echo ok
ok
[root@hjj ~]# [ 1 > 2 ] && echo ok
ok
----------------------------------------


ot@hjj ~]# [ 1 \> 2 ] && echo ok
[root@hjj ~]# [ 1 \< 2 ] && echo ok
ok
----------------------------------------
由此可见, \< , \> 是按字符串比较
[root@hjj ~]# [ 10 \< 2 ] && echo ok
ok
[root@hjj ~]# [ 10 \> 2 ] && echo ok
----------------------------------------

========================================
[] 测试 && || 操作符需要用-a -o 代替
========================================
[root@hjj ~]# [ 1 -lt 2 && 2 -lt 3 ] && echo ok
bash: [: missing `]'
[root@hjj ~]# [ 1 -lt 2 -a 2 -lt 3 ] && echo ok
ok

********************************************************************************
[[]] 表达式, 能够支持<, > 运算符而不用转义, 能够支持&&, ||运算府
********************************************************************************
[root@hjj ~]# [[ 2 > 1 ]] && echo ok
ok
[root@hjj ~]# [[ 1 > 2 ]] && echo ok
[root@hjj ~]# [[ 2 > 1 && 3 > 2 ]] && echo ok
ok
[root@hjj ~]# [[ 2 > 1 && 2 > 3 ]] && echo ok
[root@hjj ~]# [[ b > a ]] && echo ok
ok
[root@hjj ~]# [[ a > b ]] && echo ok
[root@hjj ~]#


总结:
-eq, -ne, -lt, -gt, -le, -ge 只能用于整形比较
=, !=, <, > 只用于字符串

此外测试字符串是否为空: -z, -n

[] 内的组合条件用-a, -o

[[]] 内的组合条件可以用 && , ||


另外,bash 算术表达式求值用$(()), 或$[] 来计算

---------------------------------------
字符串变量的比较,= == 都可以, 字符串变量最好加上双引号
否则,可能出现 too many arguments
----------------------------------------
[root ~]$ a="abc def"
[root ~]$ echo $a
abcroot def
[root ~]$ if [ $a = "abc def" ] ;then echo yes;else echo no;fi
bash:root [: too many arguments
no
[root ~]$ if [ "$a" = "abc def" ] ;then echo yes;else echo no;fi
yes
----------------------------------------
if 语句(测试语句)的简单写法
----------------------------------------
[root ~]$ [ "$a" = "abc def" ] && echo yes || echo no
yes
[root ~]$ [ "$a" = "abc defd" ] && echo yes || echo no
no

~                                                                                                   
~                                                     

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

四则运算表达式求值

1. 算法描述: 输入一个中缀表达式,包括+,-,*,/,(,) 的四则运算,求其计算结果. 2. 算法思想: 将中序转换成后序; 利用栈的数据结构和后序表达式求值

四则运算表达式求值

实现一个正整数加、减、乘、除四则混合运算求值方法 条件限定:   1、 输入的四则运算式由'+','-','*','/'运算符及正整数组成; 2、 无需考虑特殊字符、表达式语法错误及除不尽的情况; ...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

四则运算(表达式求值)

#include #include #include #include #define SIZE 100 #define NEW 10 struct Stack//定义结构体 { char *bas...

四则运算表达式求值

四则运算表达式求值 Time Limit: 2000MS   Memory Limit: 65535K Descriptio...

四则运算表达式求值

今天来写一篇表达式求值的博客题目的大意大家应该都知道的,例如输入3+5*2 输出13,虽然看起来很简单,但是如何让电脑也会做呢?

表达式求值算法

快速精确的对数学表达式求值 http://www.ibm.com/developerworks/cn/java/j-w3eva/ 快速精确的对数学表达式求值 使用这个...

算术表达式求值

1、问题描述当一个算术表达式中含有多个运算符,且运算符的优先级不同的情况下,如何才能处理一个算术表达式?????2、思路首先我们要知道表达式分为三类: ①中缀表达式:a+(b-c/d)*e ...

算数表达式求值

HaspMap方法: public double StringToDouble(String s1) { double d = 0; // 字符串按加减号分开 String[] a = ...

算术表达式求值

#include#includeusing namespace std;const int MAXSIZE=100;typedef struct stack{ char data[MAXSIZE]; ...

算术表达式求值

第三题、条件表达式求值  描述: 给定一个以字符串形式表示的算术表达式,计算该表达式的值。 表达式支持如下运算:“+、-、*、/”,其中“*”和“/”的优先级要高于“+”和“-”; 不需要考虑括...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)