Portál AbcLinuxu, 10. května 2025 02:44

Dotaz: bash a spojeni vstupu s promnenou - neznalost syntaxe

29.10.2009 11:48 Jcas | skóre: 19 | blog: linux v rukou ...
bash a spojeni vstupu s promnenou - neznalost syntaxe
Přečteno: 359×
Odpovědět | Admin
Dobrý den poprosím o radu, protože se mi nedaří najít řešení.

První části scriptu definuji proměnné a počítám s tím, že se tyto propěné budou v praxi editovat. Tzn. že občas nějaká další přibude, nebo se nějaká odstraní. A z toho důvodu se snažím script uděla tak, aby tyto klíčová slova se nevyskytovali dále ve scriptu, abych nemusel přidávat proměnou na 10 míst někde ve scriptu.

příklad
1p=(1h 2h 3h 4h)
1h="xterm thunar xclock"
2h="xterm mousepad"
3h="xterm gedit"
atd.
A V druhé části potřebuji tyto proměné vytáhnout. Základ mám. Script mi zkontroluje jednu z hodnot v poli a nyní potřebuji jen, aby se provedli příkazy, které nastartují to co mají.

Mám uživatelský vstup, který je zapsán v proměné x a který se rovná jedné hodnotě v poli .
read x
# x == 1h, nebo 2h, nebo 3h atd.
A nyní potřebuji, aby se nastartovaly příslušné programy a právě kvůly následné editaci se chci vyhnout, abych v této části použil něco jako
if [ $x == $1h ] atd.
Zkošel jsem eval, nebo něco jako ${$x} ale nic mi nefunguje.

Možná jdu na to úplně blbě a proto děkuji za každou radu.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

29.10.2009 11:55 l4m4
Rozbalit Rozbalit vše Re: bash a spojeni vstupu s promnenou - neznalost syntaxe
Odpovědět | | Sbalit | Link | Blokovat | Admin
Proměnné, kromě speciálních, začínají písmenem nebo podtržítkem. Takže syntakticky to je nesmysl celé od začátku.
29.10.2009 12:16 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: bash a spojeni vstupu s promnenou - neznalost syntaxe
Odpovědět | | Sbalit | Link | Blokovat | Admin
Přiznám se, že jsem vůbec nepochopil, o co ti jde.
29.10.2009 12:30 jirka
Rozbalit Rozbalit vše Re: bash a spojeni vstupu s promnenou - neznalost syntaxe
Odpovědět | | Sbalit | Link | Blokovat | Admin
viz prispevek od l4m4 - promenne nemohou zacinat cislici.

Pokud jsem pochopil Vas dotaz spravne, tak potrebujete z

h1="hodnota 1"
h2="hodnota 2"
h3="hodnota 3"

read x
...
tak po zadani napr. "h2" chcete do pomocne promenne ulozit hodnotu promenne $h2.
Mozna to jde jednoduseji, ale me tak narychlo napadlo napr. pomoci eval:
eval y=\$$x
a pak uz si s promennou $y delejte co chcete.

29.10.2009 13:05 Jirka P
Rozbalit Rozbalit vše Re: bash a spojeni vstupu s promnenou - neznalost syntaxe
Přesně tak, eval je na podobné případy klasika.

Další možnost v bashi je použít nepřímé reference, takhle:

read x
echo ${!x}
29.10.2009 15:52 Jcas | skóre: 19 | blog: linux v rukou ...
Rozbalit Rozbalit vše Re: bash a spojeni vstupu s promnenou - neznalost syntaxe
Odpovědět | | Sbalit | Link | Blokovat | Admin
Evidentně se ještě ptám blbě. (to co jsem napsal byl příklad. Moje proměné nezačínají číslem.)
p1=(h1 h2 h3)
h1="xterm"
atd
read x
Prověřím, že x obsaženo v poli pomocí for i in ....

Nyní mám
[ "$x" = "$i" ]
A problém
$x  #h1 neni prikaz a hlavne nevim jestli se 
$x == h1 nebo se == h2 nebo ...

eval y='$'$x #opet h1 neni prikaz
Vím že v $x je jedna z hodnot, které jsou v poli, ale nejsu schopen spustit xterm.
29.10.2009 16:22 l4m4
Rozbalit Rozbalit vše Re: bash a spojeni vstupu s promnenou - neznalost syntaxe
Jestli rozumím správě, problém je nakonec
x=xterm
$x
Ale to funguje.

Druhý způsob, tak to mohu chápat, je, že nedokážeš získat prvek pole:
p=(a b c)
i=1
echo ${p1[$i]}
ale nevidím, že bys iteroval přes ta pole numericky.

Třetí možnost je získání hodnoty dvojité reference:
x=xterm
y=x
echo ${!y}
ale to už tu bylo zodpovězeno.

Pak už fakt nevím, na co se ptáš.
29.10.2009 18:14 Jcas | skóre: 19 | blog: linux v rukou ...
Rozbalit Rozbalit vše Re: bash a spojeni vstupu s promnenou - neznalost syntaxe
Odpovědět | | Sbalit | Link | Blokovat | Admin
Děkuji mockrát Ta dvojitá reference bylo přesně to co jsem potřeboval.

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.