Комманда
find ~/work/ \( -name '[a-zA-Z]*' -or -name '*h' \) -print
ищет файлы, начинающиеся с прописных и строчных букв и файлы, оканчивающиеся на h)
Перношу всю эту байду в скрипт для sh:
#!/bin/sh
find ~/work/ \( -name '[a-zA-Z]*' -or -name 'h' \) -print
все работает.
Теперь хочу чтобы шаблон поиска лежал в переменной. Казалось бы чего проще:
#!/bin/sh
files_pattern="-name '[a-zA-Z]*' -or -name '*h'"
find ~/work/ \( $files_pattern \) -print
Не находится ничего. Используя set +x для отладки понимаю, что в find sh передает '[a-zA-Z]*', но не [a-zA-Z]*, что и приводит к ненахождению.
Убираю одинарные кавычки:
#!/bin/sh
files_pattern="-name [a-zA-Z]* -or -name *h"
find ~/work/ \( $files_pattern \) -print
Выдается ошибка, так как shell за место * подставляет все х..ю. Получается, что не получается и не на елку влезть и рыбку не съесть.
Объясните как шелл работает с гребанными кавычками и как разрулить мой пример в sh сценарии.
С благодарностью, Начинающий