powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Непонятки в sh-сценариях c кавычками и не только
3 сообщений из 3, страница 1 из 1
Непонятки в sh-сценариях c кавычками и не только
    #32366495
None1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Комманда
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 сценарии.

С благодарностью, Начинающий
...
Рейтинг: 0 / 0
Непонятки в sh-сценариях c кавычками и не только
    #32366709
Фотография Yet another cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как с кавычками и переменными шелл работает смотри info bash и Advansed Bash Scripting Guide. Последнее есть на русском: Архив руководства в html-формате (~380Кб)

А в твоем случае я бы создал временный файл с нужной командой и выполнял бы его. Что-то вроде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
TEMPFOO=`basename $ 0 `
TMPFILE=`mktemp -q  "/tmp/${TEMPFOO}.XXXXXX" `
if [ $? -ne  0  ]; then
        echo  "$0 : Can't create temp file, exiting..."
        exit  1 
fi

echo  "find ~/work/ \( $files_pattern \) -print "  >  "${TMPFILE}" 
bash  "${TMPFILE}" 
rm -f "${TMPFILE}


(прошу заранее прощения за возможные мелкие погрешности, но основная идея, думаю, понятна)
=====
Не дождетесь!
...
Рейтинг: 0 / 0
Непонятки в sh-сценариях c кавычками и не только
    #32367255
None1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не факт что bash и sh работают с кавычками одинаково. Маны я конечно к sh читал.
Но тем не менее с проблемой разобрался.
sed для маскировки мета-символов (сдается мне что они только усложняют жизь, чем упрощают) и eval для раскрытия кавычек в $files_pattern спасают отца русской демократии.

С наступающим.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Непонятки в sh-сценариях c кавычками и не только
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]