使用进程替换时 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 系统上将文件大小四舍五入到下一个兆字节。