[英]How to match a folder name and use it in an if condition using grep in bash?
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*");
。
为了澄清,核心问题将是能够将当前目录名与模式匹配。
您可能只需将代码
if grep -q "*abc*" <<< "${PWD##*/}" 2>/dev/null; then
echo "$PWD"
# Your rest of the code goes here
fi
您可以在if条件中直接使用grep
的退出代码,而无需在此处使用临时变量(此处$NUM
)。 如果grep
能够找到匹配项,则条件将通过。 这里的字符串<<<
,会将输入传递给grep
类似于使用管道的echo
。 第2>/dev/null
是在 grep
抛出时仅抑制任何错误( stderr - file descriptor 2
)!
作为OP的附加要求,否定条件检查就可以了
if ! grep -q "*abc*" <<< "${PWD##*/}" 2>/dev/null; then
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.