Você poderia simplificá-lo de maneira significativa (e evitar os problemas desagradáveis inerentes à análise de ls) fazendo algo como:
file_nm=$(find . -maxdepth 1 -name "*abc*");
[ -e "$file_nm" ] && grep -q "search_txt" "$file_nm" &&
echo "string found" ||
echo "string not found"
No entanto, como seu exemplo original, isso falhará se você tiver mais de um arquivo correspondente a *abc*
. Então, em vez disso, eu usaria isso:
for i in *abc*; do
grep -q "search_txt" "$i" &&
echo "string found in $i" ||
echo "string not found in $i"
done
Se você não se importa com as correspondências em vários arquivos e apenas quer saber se algum dos arquivos correspondentes a *abc*
contém a string search_txt
, você pode simplesmente fazer
grep -q "search_txt" *abc* && echo "string found" || echo "string not found"