Bash
使用 _< 而不是 < 用於使用 bash 的標準輸入
使用程序替換時using
_<
和for stdin有什麼區別。<
這是使用 bash 完成的。例子:
read bytes _< <(du -bcm random_iso.iso | tail -1); echo $bytes
那不是
_<
運算符,而是_
傳遞給 read 和<
重定向運算符的參數。<(cmd)
本身就是程序替換(擴展為指向管道的文件名)。那就是執行:
read bytes _ < /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 < random_iso.iso
或者:
du --apparent-size -cm random_iso.iso | awk 'END{print $1}'
如果他們確實希望文件大小在 GNU 系統上四捨五入到下一個兆字節。