Как искать слово в массиве

У меня есть массив

array=("a b" "c d")

Теперь мне нужно найти a b и найти вхождение. Как подойти?

2
задан 12 December 2017 в 17:07

3 ответа

Когда вы печатаете каждый элемент массива на новой строке , вы можете использовать grep:

printf '%s\n' "${array[@]}" | grep "a b"

Если элементы массива содержат \n, лучше использовать \0 и grep -z (спасибо @muru) :

printf '%s\0' "${array[@]}" | grep -z "a b"
3
ответ дан 12 December 2017 в 17:07
  • 1
    Большое спасибо. (@Hjke123 это должен быть принятый ответ! В то время как первое сообщение дает подсказки, как получить идентификаторы диска/раздела Ubuntu...), – Ring Ø 8 May 2014 в 13:08
  • 2
    Большое спасибо. (@Hjke123 это должен быть принятый ответ! В то время как первое сообщение дает подсказки, как получить идентификаторы диска/раздела Ubuntu...), – Ring Ø 8 May 2014 в 13:08
  • 3
    Большое спасибо. (@Hjke123 это должен быть принятый ответ! В то время как первое сообщение дает подсказки, как получить идентификаторы диска/раздела Ubuntu...), – Ring Ø 8 May 2014 в 13:08
  • 4
    Большое спасибо. (@Hjke123 это должен быть принятый ответ! В то время как первое сообщение дает подсказки, как получить идентификаторы диска/раздела Ubuntu...), – Ring Ø 8 May 2014 в 13:08

В этой SO Q & A предлагается способ выполнения поиска

Реализация по вашему вопросу:

#!/bin/bash
array=("a b" "c d")
value="a b"
if [[ " ${array[@]} " =~ " ${value} " ]]; then
   echo found $value
fi

Вывод:

found a b
0
ответ дан 12 December 2017 в 17:07

С bash:

array=("a b" "c d")

for ((i=0; i<${#array[@]}; i++)); do
  if [[ ${array[$i]} == "a b" ]]; then
    echo "Element $i matched"
  fi
done

Вывод:

Element 0 matched

${#array[@]} содержит номер последнего элемента в массиве.

1
ответ дан 12 December 2017 в 17:07

Другие вопросы по тегам:

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