echo的打印空格

编辑一个脚本,实现批量验证文件的md5

<span style="font-size:18px;">#!/bin/bash
md5sum="/usr/bin/md5sum"
count=0 #记录有多少个文件参与md5比较
check=0 #记录有多少个文件md5是正确的
while read line
do
        echo -e $line | $md5sum -c
        if [ $? -eq 0 ];then
                let check+=1
        fi
        let count+=1
done <md5sum.md5
echo "共有$count个文件,其中有效文件$check"</span>
然后执行的时候总是提示我格式不正确,我的文件明明是md5sum生成的,怎么能不正确呢?

然后我单独执行

echo "dbdf9049296c84c1f295e8c467a210d0  /usr/bin/grub-mkrescue" | md5sum -c
就显示正确,

然后偶然的机会我执行了

echo "dbdf9049296c84c1f295e8c467a210d0 /usr/bin/grub-mkrescue" | md5sum -c
发现竟然错了。怎么可能呢?

我就开始仔细比对,晕,差了一个空格。然后灵光一闪想到echo $line会把连续的空格当作一个,

#!/bin/bash
md5sum="/usr/bin/md5sum"
count=0 #记录有多少个文件参与md5比较
check=0 #记录有多少个文件md5是正确的
while read line
do
        echo -e "$line" | $md5sum -c
        if [ $? -eq 0 ];then
                let check+=1
        fi
        let count+=1
done <md5sum.md5
echo "共有$count个文件,其中有效文件$check"

学得时候要注意去深究这个问题,现在探究一下:

tmp="a b   d"
echo $tmp
a b d
echo "$tmp"
a b   d

至于原因,需要了解shell的解析过程:

  1. 替换变量
  2. 执行命令
  3. 按IFS(Shell 脚本中的一个变量,IFS(Internal Field Seprator) ,内部域分隔符)划分命令之后的参数,用””和”包围的部分作为命令的一个参数。

echo $tmp的执行过程为:

  1. 替换变量:echo a    b    d
  2. 执行命令:echo a    b    d
  3. 按IFS划分echo命令之后的参数a, b, d,也就是说此时echo有三个参数,而不是一个

所以打印出来就是a b d,多个空格只显示了一个。

解释参考自:http://witmax.cn/shell-echo-spaces.html
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值