Я пробую к grep за маленькую строку в намного большей строке. Обе строки хранятся как переменные, и вот пример кода:
#!/bin/bash
long_str=$(man man)
shrt_str="guide"
if grep -q $shrt_str $long_str ; then
echo "Found it!"
fi
Я не думаю, что переменное расширение прокладывает себе путь, я ожидаю это к. Я попробовал [ ]
и [[ ]]
, также заключая переменные в кавычки и передавая вывод по каналу к /dev/null
но независимо от того, что я, это не будет работать.
У кого-либо есть какие-либо идеи?
if echo "$long_str" | grep -q "$shrt_str";then
echo "found"
fi
или
echo "$long_str" | grep -q "$shrt_str" && echo "found" || echo "not found"
, но поскольку вы используете Bash Shell, затем используйте внутренние панели оболочки. Не нужно вызывать внешние команды
shrt_str="guide"
case "$long_str" in
*"$shrt_str"* ) echo "Found";;
* ) echo "Not found";;
esac
Вы хотите
if echo $long_str | grep -q $shrt_str; then
GREP для файлов или stdin. Если вы хотите использовать переменную, так как stdin, то вам нужно использовать нотацию наследства Bash:
if grep -q "$shrt_str" <<< "$long_str" ; then
Другой метод, специфичный к Bash:
if [[ $long =~ $short ]] # regex match
then
echo "yes"
fi
, но если вам не нужна длинная строка в переменной:
if man man | grep $short; then ...
, но я предполагаю, что это было только с целью наличия примера.