2013-12-22 2 views
0

я 2 выражения, которые я хочу, чтобы сравнить между ними, так что я писал:Как совместить между двумя строками stdin с помощью grep?

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

ответ от "Blue Moon" строки изменение = $ * в строки = ($ *)

it works thnx

+0

Можете ли вы привести пример? –

+0

@Allendar Нет причин держать последнее предложение, так как обратные ссылки отображаются после редактирования (который не был до редактирования, и именно поэтому он написал его в первую очередь). Это не вопрос, и я не вижу причин иметь его. –

+0

пример: пример: строки = {Avi Avi} поэтому wc должен положить 1 в результат .. но он положил 0 – user3036061

ответ

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 
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 
Смежные вопросы