使用进程替换时 using_<
和<
for stdin 有什么区别。这是使用 bash 完成的。
例子:
read bytes _< <(du -bcm random_iso.iso | tail -1); echo $bytes
Run Code Online (Sandbox Code Playgroud)
Sté*_*las 15
那不是_<
运算符,而是_
传递给 read 和<
重定向运算符的参数。<(cmd)
本身是进程替换(扩展为指向管道的文件名)。
它的作用是运行:
read bytes _ < /proc/self/fd/x
Run Code Online (Sandbox Code Playgroud)
其中 fd x 是管道的读取端。
在管道的另一端(写入),一个后台子shell 进程正在执行du -bcm random_iso.iso | tail -1
,其标准输出重定向到该管道。
所以read
将把$bytes
输出的最后一行的第一个单词存储在变量中du -bcm
,并将该行的其余部分存储在$_
变量中。
现在我不知道这du -bcm
有什么意义。没有一个-b
,-c
也没有-m
选项是标准的。虽然-c
是很常见的,是给予累计大小,GNU du
,-b
是获得以字节为单位的文件大小(不磁盘使用情况),同时-m
是让大小四舍五入到下一个mebibyte所以他们将冲突的选项(但也许他们用于-b
其启用的副作用--apparent-size
)。FreeBSD du 有-m
(对于 mebibytes),没有-b
,Solaris 也没有......
看起来它的意思是一种令人费解的写作方式:
wc -c < random_iso.iso
Run Code Online (Sandbox Code Playgroud)
或者:
du --apparent-size -cm random_iso.iso | awk 'END{print $1}'
Run Code Online (Sandbox Code Playgroud)
如果他们确实希望在 GNU 系统上将文件大小四舍五入到下一个兆字节。