如何计算 bash 变量中的行数,考虑到空虚?

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

我们知道how to count the number of lines in a variable。然而,正如那里的评论和答案所指出的那样,空变量的语义很古怪,因为空变量通常与非空、无换行符的变量相同:

$ 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 行。

我的问题:除了计算 "regularly" 然后显式检查是否为空的情况,是否有一种合适的方法在 bash 中获得这样的计数?

下面会统计换行数:

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

它在所有情况下都有效,除非最后一行缺少换行符。


你可以像这样单独测试一个变量是否为空:

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

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

awk 救援:

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