Команда grep не принимает строку с несколькими параметрами в моем скрипте - PullRequest
1 голос
/ 08 февраля 2020

Я пишу сценарий оболочки (bash), который принимает несколько аргументов и использует команду grep для каждого из аргументов. Пример:"./script.sh name1 name2 file.txt" команда grep будет вызываться дважды "grep name1 file.txt" и "grep name2 file.txt".

Проблема заключается в когда я даю несколько опций (например, «--color -n»), я объединяю их в строку и передаю их в grep следующим образом:

grep "$allParameters" "${arguments[counter]}" "$file" 

allParameters: это строка, в которой я конкатанирую все опции "--color -n"
arguments [counter]: текущий аргумент, для которого мне нужно использовать grep, например, "echo"

file: это файл, который я хочу найти

Вывод: grep: нераспознанная опция '--color -n' Использование: grep [ОПЦИЯ] ... ШАБЛОН [ФАЙЛ] ...

Примечание: Для одного варианта он работает нормально
Нужно ли снова разбивать строку? если да, то как можно поместить их все в одну строку, чтобы использовать команду grep? Можно ли вообще это сделать?

1 Ответ

5 голосов
/ 08 февраля 2020

Не заключайте в двойные кавычки несколько параметров / флагов как один параметр. Когда вы цитируете строку, grep будет обрабатывать ее как одну строку.

Например:

Действительный:

grep -ins --color=auto "foo" inputfile

Действительный:

 grep "-ins" "--color=auto" "foo" inputfile

Недействительно:

 grep "-ins --color=auto" "foo" inputfile

Поскольку нет единой опции как "-ins --color=auto"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...