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:-) » 15 października 2018, 18:50

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: 1956
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Re: Kwalifikatory - rozwijanie w bash

Post autor: LordRuthwen » 16 października 2018, 12:57

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:-) » 16 października 2018, 13:05

Bash globbing

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

Re: Kwalifikatory - rozwijanie w bash

Post autor: dedito » 16 października 2018, 13:25

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:-) » 16 października 2018, 13:27

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: 2624
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: Kwalifikatory - rozwijanie w bash

Post autor: dedito » 16 października 2018, 13:37

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: 248
Rejestracja: 08 lutego 2016, 18:47

Re: Kwalifikatory - rozwijanie w bash

Post autor: lizard » 16 października 2018, 19:07

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