Приносим извинения, если это уже ответили, но если это не удается найти правильные условия поиска.Bash: передача шаблона файла в качестве аргумента команды через переменную
Я пытаюсь динамически определять условия поиска (на основе заданных пользователем настроек) для команды найти:
# reading user settings results in array of filename patterns to delete:
patterns=("*.url" "*.html")
for i in ${patterns[@]}; do
find . -iname $i -delete
done
Если я echo
команду, результирующая строка выглядит правильно, например,
find . -iname "*.url" -delete
find . -iname "*.html" -delete
Я знаю, что мне не хватает чего-то очевидного, но я ничего не пробовал.
Я использую Bash 4.4.5, если это помогает.
---------------- EDIT -----------------
Моя благодарность Чарльз Даффи и л» L'l для правильного решения (решений). Мне было трудно оборачивать голову вокруг цитат в строках массива против цитируемых переменных и не приводить одновременно две переменные.
Извлеченные уроки: всегда указывайте переменные оболочки.
Это проблема, которую http://shellcheck.net/ поймает для вас. –
Я еще не буду отвечать на свой вопрос (если у кого-то есть лучшее решение или объяснение), но я нашел решение. Кажется, двойные кавычки в массиве являются проблемой. Если я разделяю кавычки в массиве и мягкую цитату var '' $ i "', он работает так, как ожидалось. Существует тонкая разница между строкой, которая включает в себя кавычки и строку с кавычками, которую я еще не собираю. –
Извлечение кавычек из определения массива неверно - это приводит к тому, что glob расширяется во время назначения, а не оценивается 'find'. –