如何使用grep匹配两个字符串stdin?

时间:2013-12-22 20:12:45

标签: bash grep wc

我有2个表达式,我想在它们之间进行比较,所以我写道:

result=(`echo "${strings[0]}" | grep -i -w "${strings[1]}" | wc -w`)

但是当我回声结果时它是空的......为什么?

..

更多代码:

#!/bin/bash

function checkStrings {
   strings=$*
   result=(`echo "${strings[0]}" | grep -i -w "${strings[1]}" | wc -w`)
   echo $result ${strings[*]}
}

checkStrings "Avi" "Avi"

输出: 0 Avi Avi

来自“蓝月亮”的回答 将strings = $ *更改为strings =($ *)

它适用于thnx

2 个答案:

答案 0 :(得分:0)

结果不是空的:

$ strings=( Avi Avi )
$ r=(`echo "${strings[0]}" | grep -i -w "${strings[1]}" | wc -w`)
$ echo $r
1

为了测试它是否正常工作,让我们做一个应该没有结果的案例:

$ strings=( Avi2 Avi )
$ r=(`echo "${strings[0]}" | grep -i -w "${strings[1]}" | wc -w`)
$ echo $r
0

答案 1 :(得分:0)

无需将result定义为数组,因为wc -w返回单个元素(标量)。

尝试

result=$(grep -i -w "${strings[1]}" <<< "${strings[0]}" | wc -w)

*更新*

根据更新后的问题,您可以尝试:

#! /bin/bash

function checkStrings {
   strings=($*)
   result=$(grep -i -w "${strings[1]}" <<< "${strings[0]}" | wc -w)
   echo $result ${strings[*]}
}

checkStrings "Avi" "Avi"

给出输出:

1 Avi Avi