[英]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.