簡體   English   中英

如何計算 bash 變量中的行數,尊重空性?

[英]How do I count the number of lines in a bash variable, respecting emptiness?

我們知道如何計算變量中的行數 然而,正如那里的評論和答案中所指出的,當涉及到空變量時,語義是古怪的,因為空變量通常與非空、無換行符變量相同:

$ echo -n "" | wc -l
0
$ echo -n "foo" | wc -l
0
$ echo "" | wc -l
1
$ echo "foo" | wc -l
1

不太好,如果您想計算返回的其他命令的結果數量。

現在,在該問題的一個答案中建議了部分解決方法:

printf "%s" "$a" | grep -c "^"

但這也不完全是我所追求的,因為它將值是換行符的非空變量計為具有 0 行。

我的問題:除了“定期”計數然后明確檢查是否為空之外,是否有一種體面的方法可以在 bash 中獲得這樣的計數?

awk來救援:

$ echo -n "foo" | awk 'END {print NR}'
1
$ echo -n "" | awk 'END {print NR}'
0

以下將計算換行符的數量:

printf %s "$var" | tr -d -c '\n' | wc -c

它適用於所有情況,除非最后一行缺少換行符。


您可以單獨測試變量是否為空,如下所示:

test -z "$var" && echo "var is empty"

test -n "$var" && echo "var is not empty"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM