【发布时间】:2020-03-31 15:28:22
【问题描述】:
我们知道how to count the number of lines in a variable。然而,正如 cmets 和那里的答案所指出的,当涉及到空变量时,语义是古怪的,因为空变量通常被视为与非空、无换行符变量相同:
$ 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 中获得这样的计数?
【问题讨论】:
-
“它将一个包含换行符的非空变量视为有 0 行”——是吗?这个
printf "%s" $'x\n' | grep -c "^"为我返回1。 -
@BenjaminW.:我的意思是只保留一个换行符。
-
你想计算第一行之后的空行吗?
printf "a\n\n\n\nb\n" | countcommand和不以换行符结尾的数据应该是什么结果:printf "a\nb"或printf "a\n"? -
@WalterA:假设它是某个 shell 实用程序产生了该输出。那些通常用换行符来结束事情,以便提示在线开始。所以,我认为
a\n\n\n\nb\n应该给 5;最后一个空行,没有\n,将不被计算在内。a\nb- 两行,但这是我不太可能得到的输入。a\n- 一行。另请参阅编辑。
标签: string bash is-empty line-count