expanze parametrů v /bin/bash

nonsense nonsense na volny.cz
Čtvrtek Říjen 25 21:04:49 CEST 2012


Přeji pěkný večer,

narazil jsem na celkem zajímavý problém při zpracování souborů pomocí 
shell skriptu.

- mám v pracovním adresáři podresář s názvem new
- v tomto podadresáři jsou 4 textové soubory
    file_01.txt
    file_02.txt
    file_11.txt
    file_12.txt

když v pracovním adresáři spustím příkaz

    ls -1 new/

vypíše se seznam ve tvaru:

file_01.txt
file_02.txt
file_11.txt
file_12.txt

což je očekávaná činnost.

varianta příkazu:

    ls -1 new/*

vypíše se seznam ve tvaru:

new/file_01.txt
new/file_02.txt
new/file_11.txt
new/file_12.txt

což je také očekávaná činnost. Tento tvar výpisu preferuji, lépe se hodí 
k uvažované další činnosti.

Zapíšu-li uvedený příkaz do shell skriptu jaksi na tvrdo, funkce je 
identická.
Budu-li chtít předávat mému skriptu jako první poziční parametr ($1) 
tento údaj ve tvaru (new/*), znak hvězdička vždy expanduje a pak příkaz 
uvnitř funguje sice podle očekávání, nikoli však podle potřeb.
Vypíše vždy pouze první název souboru a ne všechny, jak bych potřeboval. 
Zřejmě proto, že hvězdička expanduje na seznam souborů a vezme se vždy 
první.

Jde nějak vypnout expanzi znaku hvězdička při při předávání pozičního 
parametru do shell skriptu ?

Zatím jsem problém vyřešil tak, že v těle skriptu je místo:

    ls -1 $1

něco jako:

    ls -1 $1*

a místo prvního pozičního parametru: new/* předávám pouze: new/
Což funguje uspokojivě, pro mé účely použitelně. Získal jsem tím sice 
neplánovaný, ale vítaný vedlejší efekt v podobě možnosti užšího výběru 
souborů.

Mám ale pocit, že se nejedná o příliš čisté řešení, raději bych měl 
kompletní údaj jako poziční parametr na příkazové řádce...

L.Vlček



Další informace o konferenci Linux