保存bash命令的输出以用于管道命令(|)

时间:2019-12-11 21:47:24

标签: linux bash

说我有以下问题

  • 计算文件夹中文件名中带有“ a”的文件
  • 重复“ e”,“ i”和所有其他元音

一种解决方案是:

FilesWithA=$(ls | grep a | wc -l)
FilesWithE=$(ls | grep e | wc -l)
FilesWithI=$(ls | grep i | wc -l)
FilesWithO=$(ls | grep o | wc -l)
FilesWithU=$(ls | grep u | wc -l)

这可以正常工作,但是该文件夹包含成千上万个文件。我希望通过将ls的输出捕获到一个变量中,然后将输出发送到grepwc来加快速度,但是语法使我不胜其烦。

lsCaptured=$(ls)
FilesWithA=$($lsCaptured | grep a | wc -l) #not working!

1 个答案:

答案 0 :(得分:3)

使用此:

#!/bin/bash

captured="$(printf '%s\n' *)"
filesWithA=$(grep -c a <<< "$captured")

注意: