如何匹配文件夹名称并在bash中使用grep在if条件中使用它?

时间:2017-03-31 06:19:54

标签: bash grep

for d in */ ; do
    cd $d
    NUM = $(echo ${PWD##*/} | grep -q "*abc*");
    if [[ "$NUM" -ne "0" ]]; then
        pwd
    fi
    cd ..
done

我在这里尝试将文件夹名称与某些子字符串相匹配' abc'在文件夹的名称中,并检查grep的输出是否不是0.但是它给出了一个错误,其中显示NUM: command not found

评论中提到了错误。 NUM = $(echo ${PWD##*/} | grep -q "*abc*");应为NUM=$(echo ${PWD##*/} | grep -q "*abc*");

澄清一下,核心问题是能够将当前目录名称与模式匹配。

1 个答案:

答案 0 :(得分:1)

你可能只是简单的代码

if grep -q "*abc*" <<< "${PWD##*/}" 2>/dev/null; then
   echo "$PWD"
   # Your rest of the code goes here
fi

您可以直接在if条件中使用grep的退出代码,而不在此处使用临时变量($NUM此处)。如果grep能够找到匹配项,则会通过该条件。 here-string <<<会将输入传递给grep,类似于echo的管道。部分2>/dev/null只是为了阻止任何错误(stderr - file descriptor 2,如果 grep抛出!

作为OP要求的额外要求,否定条件检查只是

if ! grep -q "*abc*" <<< "${PWD##*/}" 2>/dev/null; then