Как может я grep комплекс представлять в виде строки в переменных?

Я пробую к grep за маленькую строку в намного большей строке. Обе строки хранятся как переменные, и вот пример кода:

#!/bin/bash

long_str=$(man man)
shrt_str="guide"

if grep -q $shrt_str $long_str ; then
        echo "Found it!"
fi

Я не думаю, что переменное расширение прокладывает себе путь, я ожидаю это к. Я попробовал [ ] и [[ ]], также заключая переменные в кавычки и передавая вывод по каналу к /dev/null но независимо от того, что я, это не будет работать.

У кого-либо есть какие-либо идеи?

28
задан DᴀʀᴛʜVᴀᴅᴇʀ 22 August 2015 в 04:48
поделиться

4 ответа

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
38
ответ дан 28 November 2019 в 02:38
поделиться

Вы хотите

if echo $long_str | grep -q $shrt_str; then
9
ответ дан 28 November 2019 в 02:38
поделиться

GREP для файлов или stdin. Если вы хотите использовать переменную, так как stdin, то вам нужно использовать нотацию наследства Bash:

if grep -q "$shrt_str" <<< "$long_str" ; then
21
ответ дан 28 November 2019 в 02:38
поделиться

Другой метод, специфичный к Bash:

if [[ $long =~ $short ]]    # regex match
then
    echo "yes"
fi

, но если вам не нужна длинная строка в переменной:

if man man | grep $short; then ...

, но я предполагаю, что это было только с целью наличия примера.

7
ответ дан 28 November 2019 в 02:38
поделиться
Другие вопросы по тегам:

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