Linux
wc 在 Unix 和 Linux 上的行為不同
當我嘗試在 Linux 和 SunOS(Unix) 上使用“wc -c”回顯值併計算字元數時,我觀察到了不同的結果。
root@SunOS-machine:~# echo "1" | wc -c 2 root@Linux-machine:/# echo "1" | wc -c 2
看起來在 Unix 機器中添加了前導空格。
root@SunOS-machine:~# echo "1" | wc -c | wc -c 9 root@Linux-machine:/# echo "1" | wc -c | wc -c 2
我正在更新腳本以刪除要在 Unix 系統中處理的前導空格。
我的問題是了解 Unix 系統上的這種行為。這是 Unix 系統上的預設設置嗎?
根據http://pubs.opengroup.org/onlinepubs/9699919799/:
預設情況下,標準輸出應包含以下形式的每個輸入文件的條目:
“%d %d %d %s\n”, <newlines>, <words>, <bytes>, <file>
如果指定了 -m 選項,則字元數應替換此格式中的 <bytes> 欄位。
如果指定了任何選項但未指定 -l 選項,則不應寫入 <newline> 字元數。
如果指定了任何選項而未指定 -w 選項,則不應寫入字數。
如果指定了任何選項並且既未指定 -c 也未指定 -m,則不應寫入字節數或字元數。
如果未指定輸入文件操作數,則不應寫入名稱,也不應寫入路徑名前的 <blank> 字元。
如果指定了多個輸入文件操作數,則應寫入附加行,格式與其他行相同,但應寫入單詞 total(在 POSIX 語言環境中)而不是路徑名和每列的總數應酌情書寫。如果有的話,這樣的附加行會寫在輸出的末尾。
所以看起來這兩種實現都不是嚴格符合的,因為標準似乎規定應該有 2 個前導空白。標準是一件有趣的事情。