Как сгенерировать аргументы для поиска команды из массива в bash? - PullRequest
1 голос
/ 17 июня 2020

Я хочу найти несколько имен файлов, иногда с указанием подстановочных знаков в моем вводе. Ниже приведено упрощение того, что у меня есть. Предположим, что массив v будет сгенерирован из файла или чего-то еще

#!/bin/bash
from_date=2020-05-17
to_date=2020-06-17
v=('-name "*a*"' '-o' '-name "*b*"')
find . "${v[@]}" -newermt "$from_date" ! -newermt "$to_date"

Это приведет к ошибке: find: unknown predicate `-name "*a*"'

Есть ли способ заставить это работать?

1 Ответ

6 голосов
/ 17 июня 2020

Идея была правильной, но цитирование первого аргумента - нет. Когда вы выполняете '-name "*a*"', оболочка сохраняет это как одно слово, что "совершенно" нормально с точки зрения массива. Но команда find ожидает предиката с именем -name, а не -name "*a*".

С расширением в кавычках оболочка передает слово -name "*a*" в качестве одного из параметров команды find, что ей не нравится. Разделяйте цитирование аргументов, чтобы они передавались отдельно.

v=('-name' '*a*' '-o' '-name' '*b*')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...