The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Непонятки в sh-сценариях "
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Непонятки в sh-сценариях "
Сообщение от None emailИскать по авторуВ закладки on 30-Дек-03, 03:04  (MSK)
Комманда
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 сценарии.

С благодарностью, Начинающий

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Непонятки в sh-сценариях "
Сообщение от scum Искать по авторуВ закладки on 30-Дек-03, 15:48  (MSK)
#!/bin/sh
files_pattern='-name [a-zA-Z]* -or -name *h'
find ~/work/ \( $files_pattern \) -print
Одинарные кавычки не расширяются (в основном).

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Непонятки в sh-сценариях "
Сообщение от None emailИскать по авторуВ закладки on 30-Дек-03, 17:37  (MSK)
Не знаю будет ли работать ваш пример, но мне кажется нет. Будет подстановка заместо * всякой ерунды.
Я решил эту проблему с помощью sed для маскирования * [ ] ?, и eval.
Спасибо.


  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Непонятки в sh-сценариях "
Сообщение от SergeiZz Искать по авторуВ закладки on 14-Фев-04, 07:59  (MSK)
>Не знаю будет ли работать ваш пример, но мне кажется нет. Будет
>подстановка заместо * всякой ерунды.
В чём не трудно убедиться...

>Я решил эту проблему с помощью sed для маскирования * [ ]
>?, и eval.
Слишком мудрёно, помоему.
Проще наверно так:
A=$'a*'
find . -name "$A"

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Непонятки в sh-сценариях "
Сообщение от Виталек Искать по авторуВ закладки on 13-Фев-04, 21:27  (MSK)
>files_pattern="-name [a-zA-Z]* -or -name *h"
>find ~/work/ \( $files_pattern \) -print

>Выдается ошибка, так как shell за место * подставляет все х..ю.
>
>Объясните как шелл работает с гребанными кавычками и как разрулить мой пример
>в sh сценарии.

В ZSH я это сделал так (мой пример):
files_pattern="-name *.xls"
find files "${(z)files_pattern}"

поясняю: в мане по find сказано что все операнды и выражения для команды find должны быть должны быть раздельными аргументами. Флаг z как раз для этого разделены.


  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру