Если ваш grep поддерживает рекурсивный флаг -r
, это решает ваш запрос:
grep -rn "String to search " *
-eq
— оператор числового сравнения. Используйте=
(либо =
, либо ==
с[[...]]
)для строк.
Вы можете найти более подробную информацию в документации, man bash
.
Другой инструмент, который может быть полезен,https://shellcheck.net
Конструкция -eq
предназначена для сравнения целых чисел и , а не строк. Вам нужен оператор проверки равенства =
или ==
с [[..]]
или использование =
с[..]
[..]
гарантированно совместим с POSIX и должен работать в любой оболочке, в то время как [[..]]
является специальной конструкцией bash
/zsh
, которая предоставляет больше возможностей для [
. Также (..)
вокруг чеков не вообще не нужны.
Так что чисто POSIX просто сделайте
read char
if [ "$char" = "Y" ] || [ "$char" = "y" ]; then
printf 'matches Yes \n'
fi
Также другим вариантом POSIX может быть использование оператора case
как
read char
case "$char" in
[Yy]) echo "Yes" ;;
[Nn]) echo "No" ;;
*) echo "incorrect" ;;
esac