Linux

wc 在 Unix 和 Linux 上的行為不同

  • May 7, 2019

當我嘗試在 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 個前導空白。標準是一件有趣的事情。

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