1

我们知道如何计算变量中的行数。但是,正如那里的评论和答案中所指出的,当涉及到空变量时,语义是古怪的,因为空变量通常被视为与非空、无换行符变量相同:

$ 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 中获得这样的计数?

4

2 回答 2

2

awk救援:

$ echo -n "foo" | awk 'END {print NR}'
1
$ echo -n "" | awk 'END {print NR}'
0
于 2020-03-31T16:03:03.670 回答
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"
于 2020-03-31T15:49:22.473 回答