Strona 1 z 1

Kwalifikatory - rozwijanie w bash

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

Re: Kwalifikatory - rozwijanie w bash

: 16 października 2018, 12:57
autor: LordRuthwen
Bo to nie jest regexp.

Re: Kwalifikatory - rozwijanie w bash

: 16 października 2018, 13:05
autor: Tom:-)
Bash globbing

Re: Kwalifikatory - rozwijanie w bash

: 16 października 2018, 13:25
autor: dedito
A co ten skrypt ma robić?

Re: Kwalifikatory - rozwijanie w bash

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

Re: Kwalifikatory - rozwijanie w bash

: 16 października 2018, 13:37
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ć *.

Re: Kwalifikatory - rozwijanie w bash

: 16 października 2018, 19:07
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