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