Bash

使用 _< 而不是 < 用於使用 bash 的標準輸入

  • October 24, 2021

使用程序替換時using_&lt;和for stdin有什麼區別。&lt;這是使用 bash 完成的。

例子:

read bytes _&lt; &lt;(du -bcm random_iso.iso | tail -1); echo $bytes

那不是_&lt;運算符,而是_傳遞給 read 和&lt;重定向運算符的參數。&lt;(cmd)本身就是程序替換(擴展為指向管道的文件名)。

那就是執行:

read bytes _  &lt; /proc/self/fd/x

其中 fd x 是管道的讀取端。

在管道的另一端(寫入),一個後台子shell 程序正在執行du -bcm random_iso.iso | tail -1,其標準輸出重定向到該管道。

因此read將在$bytes變數中儲存 的輸出的最後一行的第一個單詞,du -bcm並將該行的其餘部分儲存在$_變數中。

現在我不知道這有什麼du -bcm意義。和選項都不是標準的-b。雖然很常見並且用於給出累積大小,使用 GNU是獲取文件大小(而不是磁碟使用量)以字節為單位,而將大小四捨五入到下一個兆字節,因此它們將是相互衝突的選項(儘管可能他們使用啟用的副作用)。FreeBSD du 有(對於兆字節),不,Solaris 兩者都沒有……-c``-m``-c``du``-b``-m``-b``--apparent-size``-m``-b

看起來它是一種複雜的書寫方式:

wc -c &lt; random_iso.iso

或者:

du --apparent-size -cm random_iso.iso | awk 'END{print $1}'

如果他們確實希望文件大小在 GNU 系統上四捨五入到下一個兆字節。

引用自:https://unix.stackexchange.com/questions/138023