如何计算 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
我们知道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