Неправильно:
С echo $MYARRAY
вы найдете Variable One
, а не строку, которую вы хотите для grep.
Также обратите внимание, что для имен переменных лучше использовать строчные буквы. Я буду использовать ${directory}
, а не $DIRECTORY
(и в двойных кавычках для каталогов с пробелом).
У вас есть больше вариантов с grep
. Если вы хотите, чтобы файл с 8 экземплярами считался один, вы не можете использовать опцию grep
-c
. Полезная опция -r
. Вы ищете что-то вроде
grep -Erl "Variable One|Variable Two|Variable Three" | wc -l
Это сложно, когда переменные могут иметь специальные символы, такие как $
или |
.
Другой вариант grep
использует параметр -f FILE, Obtain patterns from FILE, one per line
Таким образом, вы должны создать функцию, которая записывает переменные в файл, и использовать что-то вроде
grep -rlFf "myVariablesFile" "${directory}" | wc -l
Когда содержимое файла быстро меняется, вы можете избежать временного файл с
grep -rlFf <(function_that_writes_variables_to_stdout) "${directory}"| wc -l
или напрямую
grep -rlFf <(printf "%s\n" "${var1}" "${var2}" "${var3}") "${directory}" | wc -l