曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3626|回复: 0
打印 上一主题 下一主题

read 从标准输入一次读入 2 个变量 (< <)

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2014-9-28 12:04:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何使用 read 从标准输入一次读入 2 个变量? 看下面一个例子:
[root@groad ~]# du -bcm lnmp1.0-full.tar.gz |tail -1                        
134 total


du 命令的 -b 选项表示获得文件的字节;-c 表示产生一个总计; -m 表示已 MB 为单位。

如果执行时只有 -b ,那么有:
]# du -b lnmp1.0-full.tar.gz |tail -1
139895354       lnmp1.0-full.tar.gz


如果执行时用了 -bc ,那么有:
# du -bc lnmp1.0-full.tar.gz |tail -1
139895354       total

比较可见,文件名被 total 替代。当然这里只有一个文件,多个文件,亦会统计多个文件的大小来。

如果执行时用了 -bcm ,那么有:
# du -bcm lnmp1.0-full.tar.gz |tail -1
134     total

得出该文件为 134M 大小。

现在,看一下下面的一种用法:
read bytes t < <(du -bcm lnmp1.0-full.tar.gz |tail -1); echo $bytes; echo $god
134
total

可以看到,bytes 和 god 两个变量的值分别为 134 和 total 。即第一个 < 符号将 "134   total" 中的 134 赋值给了变量 $bytes,而第二个 < 符号将 total 赋给了变量 $t 。

如果你看到别人写成 read bytes _ < <(du -bcm lnmp1.0-full.tar.gz |tail -1) ,这个也不要奇怪,$_ 是一个内置变量,它表示之前执行命令中的最后一个参数,那么用在这里的目的只是将 total 分配给它,从而使 bytes 获得 134 。假如要像上面那样用 echo 输出来,如 echo $_,那么输出结果是  134 。这是因为,对于 echo $_ 这条命令来说,它的前面一条命令是 echo $bytes ,也就是 $_ 的值为  $bytes, 即 134 ,可以这样验证:
# echo 134
134
#echo $_
134

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-4-29 13:38 , Processed in 0.070418 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表