Kwalifikatory - rozwijanie w bash

Potrzebujesz pomocy z C, C++, perl, python, itp.
Tom:-)
Beginner
Posty: 289
Rejestracja: 01 grudnia 2008, 13:52
Lokalizacja: Zakopane

Kwalifikatory - rozwijanie w bash

Post autor: Tom:-) »

Jestem w trakcie pisania skryptu. Potrzebuję zrozumieć dlaczego
kod odpowiednio rozwija pliki

Kod: Zaznacz cały

szczur=$katalog"cron.php*"

for plik in $szczur
do
         echo $plik                                                                                                                                                                 
done
a odmienny kwalifikator już nie. Nie rozwija wyrażenia regularnego.

Kod: Zaznacz cały

szczur=$katalog"cron.php.+"

for plik in $szczur
do
         echo $plik                                                                                                                                                                 
done
Ukazuje się

Kod: Zaznacz cały

/home/juzek/katalog/cron.php.+
Awatar użytkownika
LordRuthwen
Moderator
Posty: 2302
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Re: Kwalifikatory - rozwijanie w bash

Post autor: LordRuthwen »

Bo to nie jest regexp.
Tom:-)
Beginner
Posty: 289
Rejestracja: 01 grudnia 2008, 13:52
Lokalizacja: Zakopane

Re: Kwalifikatory - rozwijanie w bash

Post autor: Tom:-) »

Bash globbing
Awatar użytkownika
dedito
Moderator
Posty: 3512
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: Kwalifikatory - rozwijanie w bash

Post autor: dedito »

A co ten skrypt ma robić?
Tom:-)
Beginner
Posty: 289
Rejestracja: 01 grudnia 2008, 13:52
Lokalizacja: Zakopane

Re: Kwalifikatory - rozwijanie w bash

Post autor: Tom:-) »

Ostatecznie będzie usuwać z katalogu pliki o podanym wzorcu. Użyte echo jest po to aby widzieć, które pliki pozostaną usunięte.
Awatar użytkownika
dedito
Moderator
Posty: 3512
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: Kwalifikatory - rozwijanie w bash

Post autor: dedito »

Z manula basha:

Kod: Zaznacz cały

man bash
...
Jeżeli przy pomocy wbudowanego shopt włączono opcję extglob, to
rozpoznawane jest kilka rozszerzonych operatorów dopasowania wzorców.
W poniższym opisie, lista-wzorców jest listą złożoną z jednego lub
więcej wzorców rozdzielonych znakiem |. Wzorce złożone można
konstruować przy pomocy jednego lub więcej poniższych pod-wzorców:
*(lista-wzorców)
Dopasowuje zero lub więcej wystąpień zadanych wzorców
+(lista-wzorców)
Dopasowuje jedno lub więcej wystąpień zadanych wzorców
...
czyli w przypadku + musisz podać przynajmniej jeden wzorzec, zastępczo do Twojego kodu może zapewne to być *.
Awatar użytkownika
lizard
Beginner
Posty: 287
Rejestracja: 08 lutego 2016, 18:47

Re: Kwalifikatory - rozwijanie w bash

Post autor: lizard »

Jeżeli zapis ".+" ma oznaczać co najmniej jeden znak, to możesz go zastąpić poprzez "?*" bez zmian w środowisku:

Kod: Zaznacz cały

szczur=$katalog"cron.php?*"

for plik in $szczur
do
         echo $plik
done
ODPOWIEDZ