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*");
。
澄清一下,核心问题是能够将当前目录名称与模式匹配。
答案 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