正确计算bash变量的行数
我需要计算给定变量的行数。例如,我需要找到正确计算bash变量的行数,bash,shell,wc,Bash,Shell,Wc,我需要计算给定变量的行数。例如,我需要找到VAR有多少行,其中VAR=$(git log-n 10--format=“%s”) 我尝试了echo“$VAR”| wc-l),这确实有效,但如果VAR为空,则会打印1,这是错误的。有解决办法吗?比使用if子句检查变量是否为空更好的方法…(可能添加一行并从返回值中减去1?。您始终可以有条件地编写它: [ -n "$VAR" ] && echo "$VAR" | wc -l || echo 0 这将检查$VAR是否有内容并相应地执行。w
VAR
有多少行,其中VAR=$(git log-n 10--format=“%s”)
我尝试了
echo“$VAR”| wc-l)
,这确实有效,但如果VAR
为空,则会打印1
,这是错误的。有解决办法吗?比使用if
子句检查变量是否为空更好的方法…(可能添加一行并从返回值中减去1?。您始终可以有条件地编写它:
[ -n "$VAR" ] && echo "$VAR" | wc -l || echo 0
这将检查
$VAR
是否有内容并相应地执行。wc统计换行符的数量。您可以使用grep-c'^'
计算行数。
您可以看到以下方面的差异:
#!/bin/bash
count_it() {
echo "Variablie contains $2: ==>$1<=="
echo -n 'grep:'; echo -n "$1" | grep -c '^'
echo -n 'wc :'; echo -n "$1" | wc -l
echo
}
VAR=''
count_it "$VAR" "empty variable"
VAR='one line'
count_it "$VAR" "one line without \n at the end"
VAR='line1
'
count_it "$VAR" "one line with \n at the end"
VAR='line1
line2'
count_it "$VAR" "two lines without \n at the end"
VAR='line1
line2
'
count_it "$VAR" "two lines with \n at the end"
#/bin/bash
数一数{
echo“变量包含$2:==>1try:
对于纯bash解决方案:不要将git
命令的输出放入变量(可以说,变量很难看),而是将其放入数组中,每个字段一行:
mapfile -t ary < <(git log -n 10 --format="%s")
如果您需要检索第5条提交消息,此设计还将使您的生活更简单:
echo "${ary[4]}"
你想排除所有空行还是只有一个空行?git log
要么不生成任何内容,要么生成一些行。因此我需要处理空变量的情况,因为如果变量不为空,就不会有空行。这不是真的!git log-n 10
确实生成空行。但是我得到了你想要的。对不起,我尚未编写完整的示例。我正在使用format,因此没有空行:git log-n 10--format=“%s“
。它有点长,这就是为什么我认为有更好的方法。当它变得如此古怪时,我可能会选择安全的方法并明确地写出来。:)或者更简单:grep-c'^'
-请看我的答案;)使用grep-c'^'
的好建议。
mapfile -t ary < <(git log -n 10 --format="%s")
echo "${#ary[@]}"
echo "${ary[4]}"