wc -l 在 Linux 與 macOS 上輸出的格式不同

在 Linux 上跑起來沒問題的 shell script 到 macOS 上發現有狀況,追了問題後發現是 wc -l 輸出的格式不同導致的。

Linux 上面是直接輸出數字:

$ echo abc | wc -l
1

https://blog.gslin.org/archives/2024/10/29/12051/wc-l-%e5%9c%a8-linux-%e8%88%87-macos-%e4%b8%8a%e8%bc%b8%e5%87%ba%e7%9a%84%e6%a0%bc%e5%bc%8f%e4%b8%8d%e5%90%8c/

#Computer #Linux #MacOS #Murmuring #OS #Software #cli #command #interface #line #linux #mac #macos #osx #output #posix #script #shell #space #trailing #wc

wc -l 在 Linux 與 macOS 上輸出的格式不同

在 Linux 上跑起來沒問題的 shell script 到 macOS 上發現有狀況,追了問題後發現是 wc -l 輸出的格式不同導致的。 Linux 上面是直接輸出數字: $ echo abc | wc -l 1 macOS 上面則會在開頭看到 trailing space: $ echo abc | wc -l 1 可以搜到蠻多地方都有在討論這個問題,像是這篇:「WC on OSX - Return includes spaces」。 不過看起來 POSIX 標準沒有直接規定輸出的格式,只好照著語意再處理了,像是 | awk '{print $1}' 之類的方法。...

Gea-Suan Lin's BLOG
@gslin I like this more
| awk 'END{print NR}'