Kwalifikatory - rozwijanie w bash

0

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

szczur=$katalog"cron.php*"

for plik in $szczur
do
         echo $plik                                                                                                                                                                 
done

a odmienny kwalifikator już nie. Nie rozwija wyrażenia regularnego.

szczur=$katalog"cron.php.+"

for plik in $szczur
do
         echo $plik                                                                                                                                                                 
done

Ukazuje się

/home/juzek/katalog/cron.php.+
0

Poczytaj o "bash globbing"

0

Zmieniłem na

szczur=$katalog"cron.php?"
 
for plik in $szczur
do
         echo $plik                                                                                                                                                                 
done

uzyskuję wynik

/home/juzek/katalog/cron.php?
4

Ok, po kolei:

  1. To nie są wyrażenia regularne. To jest tzw. globbing i dostępne operatory to *, **, ? oraz w niektórych powłokach {} czy [].
  2. W Bashu globbing domyślnie zwróci Ci podany pattern jeśli nie może dopasować wyników, by takie rozwiązanie nie działało należy użyć set -o nullglob.
  3. Nie używaj tak globingu ani pętli. Twój przykład można zapisać zdecydowanie bezpieczniej w postaci:
    find "$katalog" -depth 1 -name "cron.php"
    
    Jeśli chcesz wykonać jakieś polecenie na wynikach to zapoznaj się z flagą -exec polecenia find (dokumentacja dostępna pod man find).
0
hauleth napisał(a):
  1. W Bashu globbing domyślnie zwróci Ci podany pattern jeśli nie może dopasować wyników, by takie rozwiązanie nie działało należy użyć set -o nullglob.

To jest wiedza, której nie znałem. Faktycznie nie było pliku który odpowiadałby operatorowi

hauleth napisał(a):
  1. Nie używaj tak globingu ani pętli. Twój przykład można zapisać zdecydowanie bezpieczniej w postaci:

Używam na co dzień, niemniej jednak wyszedłem z założenia bardziej programowego

0

https://pl.euro-linux.com/bash_bushido_czesc_pierwsza/ tutaj masz link do fajnej serii o Bashu. Sporo można się nauczyć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1