-
2021-09-07 09:11:53
一、一个字符串比较脚本,str为空
#!/bin/bash if [ $str = denglin ];then echo "OK" else echo "not OK" fi
二、运行该脚本
./test.sh: line 3: [: =: unary operator expected
not OK三、错误原因
变量str值为空,那么就成了 [ = denglin] ,显然 [ 和 denglin 不相等并且缺少了 [ 符号,所以报了这样的错误。
四、修改代码
#!/bin/bash str=denglin #"="中间不能有空格 if [ $str = denglin ];then #"="号中间一定要有空格 echo "OK" else echo "not OK" fi
更多相关内容 -
字符串比较
2018-01-08 19:59:54java比较两个字符串差异并标记出来,以html形式展现。 -
Lua 字符串
2021-01-03 03:25:45Lua 字符串 字符串或串(String)是由数字、字母、下划线组成的一串字符。 Lua 语言中字符串可以使用以下三种方式来表示: 单引号间的一串字符。 双引号间的一串字符。 [[和]]间的一串字符。 以上三种方式的字符串实例... -
JS字符串比较
2021-12-22 09:53:16JS中字符串可以进行>... 非数字字符串与数字比较时,非数字字符串会转换成NaN,NaN与任何比较都返回false。 console.log('1.2.2a' > '1.2.2b'); // false console.log('1.02.1' > '1.1'); /JS中字符串可以进行>、<、==、===比较,以下进行具体说明。
1、>、<比较
- 字符串进行大于(小于)比较时,会根据第一个不同的字符的ASCII值码进行比较;
- 数字字符串与数字比较时,数字字符串会转换成数字再进行大小比较;
- 非数字字符串与数字比较时,非数字字符串会转换成NaN,NaN与任何比较都返回false。
console.log('1.2.2a' > '1.2.2b'); // false console.log('1.02.1' > '1.1'); // false console.log('1.23' < '1.2b'); // true console.log('1.23' < 1.24); // true console.log(1.23 < '1.24a'); // false console.log(1.23 > '1.24a'); // false
2、相等(==)
相等比较时,不要求类型完全一致。非一致的,会尝试转换成一致类型再比较数值大小或者引用地址大小。
- 字符串比较,依次比较每个字符是否一样;
- 数字字符串与数字比较时,数字字符串会转换成数字再进行相等比较;
- 非数字字符串与数字比较时,非数字字符串会转换成NaN,NaN与任何比较都返回false;
- 字符串与字符对象比较时,字符对象会转换成字符串再进行相等比较;
- 字符对象比较时,比较字符对象的地址大小。
console.log('abc' == 'abc'); // true console.log('abc' == new String('abc')); // true console.log('123' == 123); // true console.log('123a' == 123); // false console.log(new String('abc') == new String('abc')); // false
3、严格相等(===)
严格相等是类型一致的相等。
console.log('abc' === 'abc'); // true console.log('abc' === new String('abc')); // false console.log(new String('abc') === new String('abc')); // false
4、比较中的几种特殊情况
主要是null、undefined、NaN的比较。
- null与undefined相等,它们自身都相等;
- null与undefined严格不相等,它们与自身严格相等;
- NaN与任何比较都不相等。
console.log(null == undefined); // true console.log(null === undefined); // false console.log(null === null); // true console.log(undefined === undefined); // true console.log(NaN == undefined); // false console.log(NaN == null); // false console.log(NaN == NaN); // false console.log(NaN === NaN); // false
-
MySQL 字符串和数值比较、字符串与字符串比较
2020-05-29 10:59:50一、字符串与数字比较 MySQL字符串和数字比较的坑:比较时会把字符串类型转成整数类型,从首字母开始,遇到非数字类型后终止。 原文: Comparison operations result in a value of1(TRUE),0(FALSE), orNULL. ...一、字符串与数字比较
MySQL字符串和数字比较的坑:比较时会把字符串类型转成整数类型,从首字母开始,遇到非数字类型后终止。
原文:
Comparison operations result in a value of 1 (TRUE), 0 (FALSE), or NULL. These operations work for both numbers and strings. Strings are automatically converted to numbers and numbers to strings as necessary.
也就是说在比较的时候,String是可能会被转为数字的。
对于数据开头的字符串,转成数字后会自动丢弃后面的字母部分,只留下纯数字进行比较。
对于没有数字的那些字符串,与数值进行比较的时候,就只剩下0去和其他数值进行比较了
注:其实字符串和数值比较最大的坑在于:它会导致查询不能用到索引,直接就影响了查询的效率。
1、对于开头部分不能截取出数字的字符串来说,转换的结果自然就是0了。就只剩下0去和其他数值进行比较了。 mysql> select 'abc'=0; +---------+ | 0='abc' | +---------+ | 1 | +---------+ 1 row in set, 1 warning (0.00 sec) mysql> SELECT "a2bc"<2; +----------+ | "a2bc"<2 | +----------+ | 1 | +----------+ 1 row in set, 1 warning (0.01 sec) 2、对于数据开头的字符串,转成数字后会自动丢弃后面的字母部分,只留下纯数字进行比较。 mysql> select 11>'010abc'; +-------------+ | 11>'010abc' | +-------------+ | 1 | +-------------+ 1 row in set, 1 warning (0.00 sec) mysql> select '01abc'>0; +-----------+ | '01abc'>0 | +-----------+ | 1 | +-----------+ 1 row in set, 1 warning (0.00 sec)
二、字符串与字符串比较
字符串比较大小是逐位从高位到低位逐个比较(按ascii码),所以字符串类型的数字18<2
mysql> select "18"<"2"; +----------+ | "18"<"2" | +----------+ | 1 | +----------+ 1 row in set (0.00 sec) mysql> select 'abc123'>'010abc'; +-------------------+ | 'abc123'>'010abc' | +-------------------+ | 1 | +-------------------+ 1 row in set (0.00 sec) mysql> select '465543153571602432' <= '5'; +-----------------------------+ | '465543153571602432' <= '5' | +-----------------------------+ | 1 | +-----------------------------+ 1 row in set (0.00 sec)
参考:
https://www.cnblogs.com/micrari/p/6358652.html MySQL中字符串与数字比较的坑https://www.cnblogs.com/FKdelphi/p/4683114.html 教程-最全ASCII 码对照表
-
C语言中字符串比较
2020-11-02 13:18:19在单片机串口实现字符串命令解析这篇文章中分析了在串口通信中如何去解析字符串命令,这篇文章就来讨论下字符串比较的方法都有哪些? 说起比较运算,肯定第一时间想到了C语言中关于比较的相关运算符 “>、<...在 单片机串口实现字符串命令解析 这篇文章中分析了在串口通信中如何去解析字符串命令,这篇文章就来讨论下字符串比较的方法都有哪些?
说起比较运算,肯定第一时间想到了C语言中关于比较的相关运算符 “>、<、!=、>=、<=、==”,那么要比较两个字符串是否相等是不是直接用“==”比较就行了。下面就来看看这种方法行不行?
先看一个例子
void main( void ) { char s1[] = "abc"; char s2[] = "abc"; __asm( "sim" ); //禁止中断 SysClkInit(); delay_init( 16 ); LED_GPIO_Init(); BEEP_GPIO_Init(); Uart1_Init( 9600 ); __asm( "rim" ); //开启中断 while( 1 ) { if( s1 == s2 ) { printf( "equal" ); } else { printf( "Not equal" ); } } }
有两个字符串s1和s2,内容都是"abc",在if语句中通过"=="运算符进行比较。
运行结果是s1和s2不相等,那为什么是不相等呢,通过右边的观察窗口可以看到,s1和s2是内部的两个存储空间,地址不一样,但是地址中的内容是一样的。那么用“ if( s1 == s2 )”这行语句去比较的时候,其实比较的是s1和s2的地址,不是比较地址中的内容,而s1和s2的地址是不相同的。
要比较内容的话,代码需要修改一下。
if(( s1[0] == s2[0] )&&( s1[1] == s2[1] )&&( s1[2] == s2[2] )) { printf( "equal" ); } else { printf( "Not equal" ); }
将代码修改为依次比较字符串中的内容
通过字符串的每一位依次比较,这样的比较方式,就可以判断出字符串相等。
将字符串数组改为指针看看
将s1和s2改为指针,可以看到通过"=="比较,结果是相等的。通过右边的观察窗口可以看出s1和s2的地址是相同的,也就是这两个字符串指向了同一个地址空间。说明此时比较的还是地址,而不是地址中的内容。我们需要比较的是内容。
将代码修改为获取指针的内容,发现比较结果也是相等的。那么能不能说明这种比较方法是可以的。将字符串内容修改一下在看看。
内容改变后,指针的地址也发生了改变,此时"s1==s2"语句就不成立了。
但是这时候"*s1==*s2"依然是相等的,这是为什么呢?通过右侧的观察窗口可以看到,此时*s1和*s2的内容是"a",而不是整个字符串的内容。说明这行代码比较的是字符串的第一个字符,而不是整个字符串。那么要比较整个内容的话,还得每个字符挨个比较。
通过上面的分析可能会有一个疑问,为什么用"=="运算符比较单个字符的时候比较的就是内容,而比较字符串的时候,比较的却是地址?
这就要说下一字符串在C语言中比较特殊的一点,在C语言中处理一般的变量如整形、字符型、浮点型时,直接操作的是变量的值,比如 int a,b; a=b;在执行这行代码的时候,是将b的值拷贝一份然后复制给a。比较运算符“==”在使用的时候,也直接比较的是变量的值。而C语言在使用字符串的时候,是通过地址引用而不是值引用来操作的。
通过数组定义的字符串,系统分配的是两个不同的地址,虽然内容相同,但是实际上地址是不相同的,通过相等运算符"=="比较时,比较的是s1和s2本身的值,s1和s2本身的值是一个地址,这两个地址不同,所以比较结果就不相等。
用指针定义的两个字符串,系统分配的是同一个地址空间,说明虽然他们的名字不一样,但是实际上是共用了同一个地址。通过相等运算符"=="比较时,比较的是s3和s4本身的值,s3和s4本身的值是一个地址,这两个地址相同,所以比较结果相等。
通过上面的分析,发现在处理字符串的时候不能直接用"=="运算符去比较,那么要如何去比较呢?
可以直接使用 C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
该函数返回值如下:
- 如果返回值小于 0,则表示 str1 小于 str2。
- 如果返回值大于 0,则表示 str1 大于 str2。
- 如果返回值等于 0,则表示 str1 等于 str2。
strcmp函数实际上是对字符的ASCII码进行比较,实现原理如下:首先比较两个串的第一个字符,若不相等,则停止比较并得出两个ASCII码大小比较的结果;如果相等就接着 比较第二个字符然后第三个字符等等。
这个函数其实就是相当于把上面例程中对字符串每个字符独立比较方法的一个封装,内部函数实现方式类似于下面这样。
由于字符串在C语言中的处理比较特殊,所以C语言提供了一个专门操作字符串的库。关于字符串的操作在"string.h"这个头文件中可以看到。
有字符串增加,字符串删除,字符串拷贝,字符串比较,字符串查找等等各种功能的函数封装,这样在处理字符串的时候就可以直接调用库函数来实现。
比如在处理串口命令的时候,如果串口命令为字符串,就可以直接用字符串比较命令去实现。
if ( strcmp( uartRecStr, "led1 on" ) == 0 ) { led1_on(); } else if ( strcmp( uartRecStr, "led1 off" ) == 0 ) { led1_off(); } else if ( strcmp( uartRecStr, "led2 on" ) == 0 ) { led1_off(); } else if ( strcmp( uartRecStr, "led2 off" ) == 0 ) { led1_off(); }
将接收到字符串和指定的字符串比较,如果字符串相等,就调用相关的函数,这样通过if语句就可以简单的处理串口的指令。
不过通过if语句比较的话,程序的分支太多,程序看起来比较臃肿,能不能用switch语句去实现呢?但是switch语句中不支持字符串的比较直接比较,那要怎么实现?
char *cmdStr[] = {"led1 on", "led1 off", "led2 on", "led2 off"}; //字符串命令数组 len = sizeof( cmdStr ) / sizeof( cmdStr[0] ); //计算字符串个数 for( i = 0; i < len; i++ ) { if( strcmp( uartRecStr, cmdStr[i] ) == 0 ) { switch( i )//分支语句不支持字符串,通过字符串数组的下标确定是哪个字符串。 { case 0: led1_on(); break; case 1: led1_off(); break; case 2: led2_on(); break; case 3: led2_off(); break; default: break; } } }
可以将字符串存储在数组中,通过数组的下标去调用不同的字符串,然后使用字符串比较函数去判断字符串,这样switch语句的分支判断就可以转换为字符串的下标。
通过这种方法就可以直接在串口中处理简单的通信命令了。
-
java两个字符串的差异对比
2019-04-04 16:39:18有两串字符串,现在把里面不同的内容标记出来。 新增的修改的删除的都有标识 -
Python字符串比较
2020-09-15 23:43:13Python字符串比较 (Python String Comparison) 方法1:比较使用is运算符 (Method 1: Comparing Using is Operator) is and is not operator is used to compare two strings as below: is和not运算符用于比较两个... -
MATLAB字符串比较总结
2021-05-08 16:15:44m=''% 获取字符串长度length(a)% 连接两个字符串,每个字符串最右边的空格被裁切d=strcat(a,c)length(d)% 连接多行字符串,每行长度可不等,自动把非最长字符串最右边补空格% 使与最长字符串相等,会忽略空字符串e=... -
MySQL中字符串比较大小(日期字符串比较问题)
2022-01-05 16:54:06数据库中在对于数字与非数字混合的字符串,在进行大小比较的时候,如果两字符串长度相等,那么两字符串就会比较相同位置的字符,比较时若字符是数字,则直接比较,若字符是非数字那么会转换为ascii码进行比较,若在... -
python字符串比较
2021-01-27 15:44:22字符串比较规则: 从第一个字符开始,位置一一对应比较编码大小,当一个字符串全部字符和另一个字符串的前部分字符相同时,长度长的字符串为大。 例题解析: 以下选项中值为 False 的是 ( D ) A.‘abcd’<‘ad... -
Java 字符串比较
2021-03-04 02:02:54在 Java 中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法1. equals()equals() 方法将逐个地比较两个字符串的每个字符是否相同。"abc".equals("abc")2. ... -
c语言怎么进行字符串比较
2021-05-26 01:18:23比较方法:1、bcmp(),比较字符串的前n个字节是否相等;2、strcmp(),区分大小写的比较字符串;3、stricmp(),不区分大小写的比较字符串;4、strncmp()或strnicmp(),区分大小写的比较字符串的前n个字符。本教程操作... -
字符串对比(c语言)
2020-03-24 20:52:33给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等。比如 Beijing 和 Hebei 2:两个字符串不仅长度相等,而且相应位置上的字符完全... -
mybatis字符串比较
2021-07-08 16:01:54同一个坑踏了两次了!!! <if test = " TYPE == '1' ">...1、 转换为字符串进行比较 <if test = " TYPE == '1' .toString()"> 转换为字符串进行比较 </if> 2、 使用双引号 “” <if -
python中的字符串比较
2021-11-12 21:10:13字符串比较的规则是由左边开始最前面的字符对应ascll码表中的大小决定的,与长度无关,比如下面这个比较: 进阶,如何根据字符串数组长度排序 我们可以使用sort方法和sorted函数根据长度进行排序,方法是将键作为... -
时间字符串比较大小
2020-04-15 21:29:52比较简单的方法是可以使用String类中的compareTo()方法比较 //格式一 String date1 = "2019-01-21"; String date2 = "2019-02-12"; //格式二 String date1 = "20190121"; String date2 = "20190212... -
Java字符串比较(3种方法)
2021-05-06 16:43:06equals() 方法将逐个地比较两个字符串的每个字符是否相同。如果两个字符串具有相同的字符和长度,它返回 true,否则返回 false。对于字符的大小写,也在检查的范围之内。equals() 方法的语法格式如下: str1.equals... -
字符串对比[蓝桥杯]
2020-09-29 18:19:13题目链接:字符串对比 时间限制: 1 Sec 内存限制: 256 MB 题目描述: 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等。比如 ... -
Java字符串比较的几种方法
2021-03-01 17:31:39在 Java 中,字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等··;常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法,接下来详细介绍这 3 个方法的使用: ... -
字符串比较原理(strcmp,string)
2019-10-29 10:49:09字符串比较分为两种情况,一种是单个字符比较大小,一种是多个字符构成的字符串整体比较大小。 字符与字符串比较原理: 字符串与字符比较原理其实都是比较单个字符的ASCII码值。 如果单纯比较长度,直接调用类似于... -
1.12 字符串比较(3种方法)
2020-10-02 12:24:08字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等。在 Java 中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。下面详细介绍这 3 个方法的使用。 ... -
JS中的字符串比较
2020-09-29 18:20:122.纯数字和数字型字符串比较 (30 > '20'); //true 数字型字符串会转成纯数字再与前面的纯数字比较,即 20 与 30 相比谁大? 3.纯数字和非数字字符串比较 ('a' > 96); //false 这种情况下,js 会将字符串转成... -
qt_字符串比较
2020-12-30 21:16:49在qt中经常会使用到字符串的比较,这里的比较不仅是数字和字母还包含汉字的字符。下面是几种常用的字符比较方式: QString str1 = "你好"; QString str3 = ui->pushButton_13->text(); 1: QString::... -
c语言字符和字符串比较(STRCMP和==)
2021-10-30 09:26:15字符串比较 1.字符比较用==号,既可以用常量也可以用变量比较 char a,b; if(a==b) { printf("yes"); } 2.strcmp比较字符只能用常量,否则会报错 例如: char a,b; if(strcmp(a,b)!=0) { printf("yes")... -
c++ string字符串比较
2021-05-10 22:44:54字符串比较是按字符的ASCII码进行对比 = 返回 0 返回 1 < 返回 - 1 int compare(const string &s) const;//与字符串s比较 int compare(const char *s) const; //与字符串s比较 #include <iostream> ... -
两个字符串比较
2018-03-02 14:36:00两个字符串比较大小: 一、可以用compareTo()方法,另外还有compareToIgnoreCase(String) 忽略大小写及 compareTo(object string)这些 方法返回值是int,以compareTo()方法为例: 1 .如果字符串相等返回值为0...