Portál AbcLinuxu, 10. května 2025 04:18

Dotaz: Bash - vkládání argumentů z proměnné

12.7.2013 11:18 skvedo | skóre: 1
Bash - vkládání argumentů z proměnné
Přečteno: 368×
Odpovědět | Admin
Zdravím,

ve skriptu chci spustit grep s tím, že vzor se vkládá z proměnné, která je načtena ze souboru.

Můj příkaz:
grep $DEFINEKEY soubor
v proměnné DEFINEKEY mám uloženo:
-e "access-list"
Po spuštění nedostanu žádný výstup (odpovídající řádky v souboru jsou)

pokud pro kontrolu provedu příkaz:
grep $DEFINEKEY soubor
tak dostanu očekávaný výstup:
grep -e "access-list" soubor
Pokud tento příkaz zapíšu přímo do skriptu, tak vše funguje jak má.

Nesetkal se s tím už někdo? Předem děkuji za rady.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

12.7.2013 11:34 Kit
Rozbalit Rozbalit vše Re: Bash - vkládání argumentů z proměnné
Odpovědět | | Sbalit | Link | Blokovat | Admin
Problém je v tom, že -e "access-list" jsou dva parametry (klíč a hodnota), které však předáváš jako jeden.
12.7.2013 12:55 skvedo
Rozbalit Rozbalit vše Re: Bash - vkládání argumentů z proměnné
V tom problém nebude. Do souboru jsem si pro testování přidal řádky:
aa xx
aa zz
v souboru, ze kterého je načtena proměnná DEFINEKEY jsem změnil její obsah na:
-e xx -e zz
a funguje to správně.

Pokud zadám do proměnné:
-e aa zz
tak se dle očekávání interpretuje zz jako název souboru.

Když do proměnné vložím jedno z:
-e "aa zz"
-e 'aa zz'
dostanu chybovou hlášku:
grep: zz": Adresář nebo soubor neexistuje
nebo
grep: zz': Adresář nebo soubor neexistuje
Problém je v podivné interpretaci uvozovek, které tam teď nejsou potřeba, ale v budoucím použití asi budou a na ten grep ještě navazuje sed kterému jsou argumenty plněny stejně a tam jednotlivé vzory už obsahují mezery.
12.7.2013 15:10 pako
Rozbalit Rozbalit vše Re: Bash - vkládání argumentů z proměnné
Problém je v podivné interpretaci uvozovek, které tam teď nejsou potřeba, ale v budoucím použití asi budou
Pokud to potrebujete kvuli podivnych znaku, tak je potreba je osetrit pri vkladani do promenne.

Pokud vam jde o mezery (jakehokoliv druhu), takje to trochu horsi. "${VAR}" nepomuze, protoze pak budete mit problem, ktery popisoval Kit. Asi nejprehlednejsi pak bude pouzvat pole:
$ cat soubor
1111
2222
3333
4444
1221
"22"33
"x y z"abc
$ PAR=("-e" '"x y z"' "-e" "33")
$ grep "${PAR[@]}" soubor
3333
"22"33
"x y z"abc
na ten grep ještě navazuje sed
Pro pana krale a proc? Proc to nevyresit rovnou v tom sedu? Nebo tim nejak testujete forkovani, popr. jde o obfuskaci retezenim?
12.7.2013 15:49 Kit
Rozbalit Rozbalit vše Re: Bash - vkládání argumentů z proměnné
... a na ten grep ještě navazuje sed ...
V tom případě je ten grep zřejmě zbytečný.
12.7.2013 14:44 pako
Rozbalit Rozbalit vše Re: Bash - vkládání argumentů z proměnné
Nikoliv. Problem je v rom, ze to preda vcetene tech uvozovek. Tedy nehleda vyraz access-list. ale "access-list".

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.