[英]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.