-eq оператор не работает должным образом

Если ваш grep поддерживает рекурсивный флаг -r, это решает ваш запрос:

grep -rn "String to search " * 
-2
27.09.2019, 11:15
2 ответа

-eq— оператор числового сравнения. Используйте=(либо =, либо ==с[[...]])для строк.

Вы можете найти более подробную информацию в документации, man bash.

Другой инструмент, который может быть полезен,https://shellcheck.net

2
28.01.2020, 05:14

Конструкция -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
3
28.01.2020, 05:14

Теги

Похожие вопросы