0

只是在寻找其他任何可能更好的方法来执行以下操作。外壳检查正在调用“SC2002 无用的猫”,而我试图缓解的所有其他方式都失败了。它按预期工作,所以我倾向于不理会它 - 除非有任何其他想法。

#!/bin/bash
y=0
mapfile -O "$y" -t "ARRAY_NAME" < <(cat "${FILENAME}" | grep "pattern 1" | grep "pattern 2")

工作正常,但命中 SC2002 无用猫。所以,我试图明显:

mapfile -O "$y" -t "ARRAY_NAME" < <(grep -e "pattern 1" -e "pattern 2" "${FILENAME}")

不高兴 - 导致“找不到命令 grep”

现在,我可以简单地将文件逐行读取到带有 mapfile 的数组中,但我不能只 grep 出我需要的行 - 我也可以对 read 做同样的事情,这可能更好,但是有同样的grep问题。

那么有什么想法吗?在这种情况下我可以忽略 SC2002 吗?

4

1 回答 1

1

在管道开头使用“cat filename”(单个文件)通常可以通过将管道中 NEXT 命令的标准输入重定向到文件中来消除。

mapfile -O "$y" -t "ARRAY_NAME" < <(grep "pattern 1" <"${FILENAME}"| grep "pattern 2")

除非你关心效率的每一个百分比,并且这条线是性能的瓶颈,如果你愿意,可以安全地忽略这条消息。

于 2019-12-16T16:58:21.060 回答