如何在变量中grep复杂的字符串?

Cra*_*aig 28 variables bash grep if-statement

我试图在一个更大的字符串中grep一个小字符串.这两个字符串都存储为变量,这是一个代码示例:

#!/bin/bash

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

if grep -q $shrt_str $long_str ; then
        echo "Found it!"
fi
Run Code Online (Sandbox Code Playgroud)

我认为变量扩展并不像我期望的那样发挥作用.我已经尝试过,[ ]并且[[ ]]还引用变量并输出输出,/dev/null但无论我做什么都行不通.

有没有人有任何想法?

gho*_*g74 38

if echo "$long_str" | grep -q "$shrt_str";then
  echo "found"
fi
Run Code Online (Sandbox Code Playgroud)

要么

echo "$long_str" | grep  -q  "$shrt_str"  && echo "found" || echo "not found"
Run Code Online (Sandbox Code Playgroud)

但由于您使用的是bash shell,因此请使用shell内部.无需调用外部命令

shrt_str="guide"
case "$long_str" in 
   *"$shrt_str"* ) echo "Found";;
   * ) echo "Not found";;
esac
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 21

grep用于文件或stdin.如果你想使用变量作为stdin,那么你需要使用bash的herestring表示法:

if grep -q "$shrt_str" <<< "$long_str" ; then
Run Code Online (Sandbox Code Playgroud)


Alo*_*hal 9

你要

if echo $long_str | grep -q $shrt_str; then
Run Code Online (Sandbox Code Playgroud)


Pau*_*ce. 7

另一种特定于Bash的技术:

if [[ $long =~ $short ]]    # regex match
then
    echo "yes"
fi
Run Code Online (Sandbox Code Playgroud)

但是如果你不需要变量中的长字符串:

if man man | grep $short; then ...
Run Code Online (Sandbox Code Playgroud)

但我认为这只是为了举个例子.