shell是如何判断空格长度的??
2015-06-19 18:37
741 查看
说实话shell确实有些东西需要学习啊,这不又遇到麻烦了
shell空字符串的判断
这个是shell的一段脚本,
文件名为t9,测试用 呵呵 随便取的名字
调用方法1:
sh t9
输出 :
The paramters num is 0,return !
没问题
调用方法2:
sh t9 ""
输出:
The length is 0
没问题
调用方法3:
sh t9 " " ##说明,双引号里面有一个空格
输出:
The length is 0
问题出来了,长度为什么是0,不应该是1吗?
真让人纠结,没办法 自己查吧
网上有人呢说shell字符串为空和长度判断的问题
http://blog.163.com/awk_sed/blog/static/202442007201202011135922/
看了下 ,没有说到我的问题,
不过还好,在
写道
判断字符串为空的方法有三种:
if [ "$str" = "" ]
if [ x"$str" = x ]
if [ -z "$str" ]
注意:都要代双引号,否则有些命令会报错,养成好习惯吧!
这一段的时候给了我灵感,”注意:都要带双引号“
是不是双引号的问题,好吧加上双引号试一下
脚本如下
唯一的不同是在应用$1的时候添加了双引号,
看下执行结果
直接从调用方法3开始:
sh t9 " " ##说明,双引号里面有一个空格
输出:
The script is not 'yes' ##解释下,这个输出是上面这段脚本下面的脚本上面没有贴出来没关系这足以说明
哈哈 结果出来了,
有点兴奋啊,
等等,为什么会这样?
好吧,下面是我的个人理解。
sh调用的时候会把脚本名(t9)后的都作为参数,
而shell解析的时候
这一句会先解析成
说明:这个空格打印出来不显示,这里用汉字替代,可以把’空格‘替换为一个空格
但是shell解析的是又有一个问题,
就是基本上可以忽略空格(只保留一个,把所有的空格都看成一个,以后的全部都作为参数)
这个时候就有了问题,比较字符’-z‘后面什么参数都没有,所以一定会报错。
解释完毕
避免办法,字符串比较的时候一定要加上双引号。
shell空字符串的判断
if [ $# = 0 ] then echo "The paramters num is 0,return !" return fi if test -z $1 then echo "The length is 0 " return fi
这个是shell的一段脚本,
文件名为t9,测试用 呵呵 随便取的名字
调用方法1:
sh t9
输出 :
The paramters num is 0,return !
没问题
调用方法2:
sh t9 ""
输出:
The length is 0
没问题
调用方法3:
sh t9 " " ##说明,双引号里面有一个空格
输出:
The length is 0
问题出来了,长度为什么是0,不应该是1吗?
真让人纠结,没办法 自己查吧
网上有人呢说shell字符串为空和长度判断的问题
http://blog.163.com/awk_sed/blog/static/202442007201202011135922/
看了下 ,没有说到我的问题,
不过还好,在
写道
判断字符串为空的方法有三种:
if [ "$str" = "" ]
if [ x"$str" = x ]
if [ -z "$str" ]
注意:都要代双引号,否则有些命令会报错,养成好习惯吧!
这一段的时候给了我灵感,”注意:都要带双引号“
是不是双引号的问题,好吧加上双引号试一下
脚本如下
if [ $# = 0 ] then echo "The paramters num is 0,return !" return fi if test -z "$1" then echo "The length is 0 " return fi
唯一的不同是在应用$1的时候添加了双引号,
看下执行结果
直接从调用方法3开始:
sh t9 " " ##说明,双引号里面有一个空格
输出:
The script is not 'yes' ##解释下,这个输出是上面这段脚本下面的脚本上面没有贴出来没关系这足以说明
哈哈 结果出来了,
有点兴奋啊,
等等,为什么会这样?
好吧,下面是我的个人理解。
sh调用的时候会把脚本名(t9)后的都作为参数,
而shell解析的时候
if test -z $1
这一句会先解析成
if test -z '空格'
说明:这个空格打印出来不显示,这里用汉字替代,可以把’空格‘替换为一个空格
但是shell解析的是又有一个问题,
就是基本上可以忽略空格(只保留一个,把所有的空格都看成一个,以后的全部都作为参数)
这个时候就有了问题,比较字符’-z‘后面什么参数都没有,所以一定会报错。
解释完毕
避免办法,字符串比较的时候一定要加上双引号。
相关文章推荐
- shell学习十七天----awk命令
- 终极 Shell
- Bash 中的特殊字符大全
- 如何使用Shell脚本编译生成Archive文件并导出签名IPA文件。
- shell脚本生成一个简单的计算器
- Powershell 自动化安装zabbix agent
- 解决删除大量文件的问题 -bash: /usr/bin/sudo: Argument list too long
- python调用Shell脚本:os.system(cmd)或os.popen(cmd)()【转】
- 使用Bash Shell处理JSON文件
- 40 个很有用的 Mac OS X Shell 脚本和终端命令
- 解决Xshell显示中文乱码的问题
- Bash 快捷键大全
- Bash中一些重要的命令
- Shell脚本实现判断IP地址是否在一个ip段内代码分享
- php-fpm开机自动启动Shell脚本
- 整理的Linux Shell语法速查表(用C语言语法来作对比)
- 70个经典的 Shell 脚本面试问题
- -bash: zip: command not found提示解决办法
- 感叹号:bash 的历史扩展功能
- bash字符串处理