bash - 捕获输出并计算其行数

标签 bash find wc

我想运行一个find 命令,然后计算输出的行数并给出结果的输出。我的直截了当的方法是:

output=$(find ...)
lines=$(echo "$output" | wc -l)
echo "$output"

但不幸的是,使用 echo 将其通过管道传输到 wc 会添加一个换行符,因此即使 find 没有找到任何内容(零行输出),wc 给出了 1(对于 echo 附加的换行符。

我将 echo 更改为 printf 以防止将换行符附加到输出,但随后也将 find 的单行输出更改为 printf var/ 没有换行符,因此 wc 给出了 0

问题在于捕获输出 ($(...))。它去除了在我的情况下相关的尾随换行符。

这能以某种方式避免吗?

我的原始任务是否有完全不同的方法?

最佳答案

想到的一个简单解决方法是检查字符串是否为空:

[ -z "$output" ] && count=0 || count=$(wc -l <<< "$output")

如果 find 没有产生任何输出,那么 count 将为 0,否则它将包含输出中的行数。

关于bash - 捕获输出并计算其行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23295161/

相关文章:

xcode - Xcode 5 上的项目范围词匹配搜索

linux - 计算 Linux 中两个模式之间的模式总数(如果可能,使用 sed)

linux - 设置唤醒警报的 bash 脚本设置了错误的时间

php - 使用 PHP 执行 bash

linux - 找不到命令。在远程主机上执行 bash 时

linux - 显示命令输出 Linux 脚本 shell 中的特定行

c - 用 C 编写的程序模拟 WC 命令不起作用

Bash 条件管道

javascript - 使用 lodash 或 angularjs 测试对象中是否存在值的最简单方法是什么

excel - 查找并替换公式中的文本