如何知道 CLI shell 有多少行程式碼(不包括空白行)?
sh
這個問題的目的是了解如何計算CLI shell的程式碼行數Bash
。
鑑於核心有大約 1500 萬行程式碼,我確實對這兩個讓我與核心互動的程式的程式碼行數量感到好奇。
答案1
對於最新版本巴什,即bash v4.4,答案是134576。
find . -name '*.[ch]' | xargs grep -v '^\s*$' | wc -l
find . -name '*.[ch]'
.c
意味著查找以or結尾的文件.h
(不計算.def
,.po
文件,儘管我認為它也是源代碼的一部分)
在,grep -v '^\s*$'
(歷史記錄,將形式 [\s*] 改為 \s*),
-v
僅列印執行此操作的行不是匹配^
表示行開始$
表示行結束\s
表示空白,包括空格、製表符、換行符
因此grep -v '^[\s]*$'
排除只有空格的行並對wc -l
它們進行計數。
有許多噓原始碼,適用於 UNIX v6 sh(https://etsh.io/history/sh.c)。只有860行。
答案2
如果我理解正確的話,那麼你的朋友就是命令 wc。
# cat example
passwd
group
# wc -l example
3 example
# grep -v "^$" example | wc -l
2
或僅使用 grep:
# grep -c . example
2
如果有多個文件。以 bash 原始碼為例。
# wget -c https://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz
# tar xfvz bash-4.4.tar.gz
# grep -R -c . bash-4.4/ | awk -F : '{sum += $2} END {print sum}'