echo的打印空格
来源:互联网 发布:菊花插件dbm 导入数据 编辑:程序博客网 时间:2024/06/06 12:26
编辑一个脚本,实现批量验证文件的md5
<span style="font-size:18px;">#!/bin/bashmd5sum="/usr/bin/md5sum"count=0 #记录有多少个文件参与md5比较check=0 #记录有多少个文件md5是正确的while read linedo echo -e $line | $md5sum -c if [ $? -eq 0 ];then let check+=1 fi let count+=1done <md5sum.md5echo "共有$count个文件,其中有效文件$check"</span>然后执行的时候总是提示我格式不正确,我的文件明明是md5sum生成的,怎么能不正确呢?
然后我单独执行
echo "dbdf9049296c84c1f295e8c467a210d0 /usr/bin/grub-mkrescue" | md5sum -c就显示正确,
然后偶然的机会我执行了
echo "dbdf9049296c84c1f295e8c467a210d0 /usr/bin/grub-mkrescue" | md5sum -c发现竟然错了。怎么可能呢?
我就开始仔细比对,晕,差了一个空格。然后灵光一闪想到echo $line会把连续的空格当作一个,
#!/bin/bashmd5sum="/usr/bin/md5sum"count=0 #记录有多少个文件参与md5比较check=0 #记录有多少个文件md5是正确的while read linedo echo -e "$line" | $md5sum -c if [ $? -eq 0 ];then let check+=1 fi let count+=1done <md5sum.md5echo "共有$count个文件,其中有效文件$check"
学得时候要注意去深究这个问题,现在探究一下:
tmp="a b d"echo $tmpa b decho "$tmp"a b d
至于原因,需要了解shell的解析过程:
- 替换变量
- 执行命令
- 按IFS(Shell 脚本中的一个变量,IFS(Internal Field Seprator) ,内部域分隔符)划分命令之后的参数,用””和”包围的部分作为命令的一个参数。
echo $tmp的执行过程为:
- 替换变量:echo a b d
- 执行命令:echo a b d
- 按IFS划分echo命令之后的参数a, b, d,也就是说此时echo有三个参数,而不是一个
所以打印出来就是a b d,多个空格只显示了一个。
解释参考自:http://witmax.cn/shell-echo-spaces.html 0 0
- echo的打印空格
- php打印输出空格以及echo中.和,的区别
- echo命令的打印环境变量
- linux的打印命令echo
- [shell] shell echo打印换行的方法
- shell echo打印换行的方法
- echo 打印彩色字符
- echo打印相关
- PHP中echo(),print(),print_r()的区别及打印函数
- Linux终端打印的常用命令echo和printf
- PHP中echo(),print(),print_r()的区别及打印函数
- PHP中echo(),print(),print_r()的区别及打印函数
- PHP中echo(),print(),print_r()的区别及打印函数
- Linux echo命令打印带有颜色的字
- 打印word时勾选空格的实现
- linux echo 打印转义字符
- Shell打印echo和printf
- 用 echo 创建文件内容时,如何避免尾部的多出来的一个空格
- ubuntu tftp
- 从frameworks的Java层调用JNI的方法
- python object 类
- GCC编译原则
- 选择排序
- echo的打印空格
- iOS8 【xcode6中添加pch全局引用文件】
- Apache HttpClient 4.3开发指南
- AndroidEventBus事件总线
- 搜索页使用dede:arclist dede:chanellist 标签方法
- Doxygen—程序文档生成工具
- iOS8 中新增 UIResponder 功能 - UserActivityState
- QTreeWidget系列--QTreeWidgetItem可随意移动(拖拽),更换父亲节点
- Exec Maven Plugin全面解析和使用示例