Portál AbcLinuxu, 13. července 2025 19:02


Dotaz: Bash indirect reference

2.8.2011 14:46 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
Bash indirect reference
Přečteno: 219×
Odpovědět | Admin
Zdravím,

Již nějakou dobu bloumám nad tím, jak u pole předaného funkci názvem zjistím počet prvků.

první fáze (nepřímá reference na celé pole) se povedla
function enum () {
   LocalArray= "$1[*]"
   echo ${!LocalArray} # vypíše obsah pole 
   echo ${#!LocalArray} # Tady bych chtěl vypsat počet prvků, 
     tento zápis ale bash nebere
   .....

}
Možná jdu na problém zbytečně složitě, ale ani přes google nemůžu najít odpověď

Předem díky za pomoc

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.8.2011 15:25 marek
Rozbalit Rozbalit vše Re: Bash indirect reference
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dobry den.

Jestli jsem to dobre pochopil:

marek:~/bash$ function enum () {
>    LocalArray="$1"
>    echo ${#LocalArray}
> 
> }
marek:~/bash$ 
marek:~/bash$ pole=(nula jedna dva tri)
marek:~/bash$ 
marek:~/bash$ enum pole
4
marek:~/bash$
Marek
3.8.2011 07:43 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: Bash indirect reference
Zajímavé přímočaré řešení :D

kdysi jsem tenhle problém řešil, a mám dojem, že to přímé přiřazení nefungovalo, a muselo se to obcházet právě tím nepřímým odkazem .. a teď , když jsem zase hodlal něco pro bash napsat, vydal jsem se stejnou cestou...

Děkuji za řešení.. doufám, že nemá nějaké skryté zádrhele.
3.8.2011 10:01 marek
Rozbalit Rozbalit vše Re: Bash indirect reference
Dobry den.

No ono to bohuzel ma takovou neprijemnou vlastnost:

marek:~$ function enum () {
>     LocalArray="$1"
>     echo ${#LocalArray}
>  }
marek:~$ pole=(nula jedna dva )
marek:~$ enum pole
4

Pocitame totiz pocet znaku ve slove "pole"

Takze se za blamaz omlouvam a sypu si popel na hlavu.

Marek
2.8.2011 15:26 NN
Rozbalit Rozbalit vše Re: Bash indirect reference
Odpovědět | | Sbalit | Link | Blokovat | Admin
echo ${#array[*]}
echo ${#array[@]}
Je tam drobny rozdil, ale ten uz si nepamatuju..

NN
2.8.2011 16:23 zulu
Rozbalit Rozbalit vše Re: Bash indirect reference
Odpovědět | | Sbalit | Link | Blokovat | Admin
Kdysi jsem podobnou věc řešil a nevypadá to, že by se v tomto směru něco změnilo. Takže pokud nechceš vytvářet nové pole, tak asi budeš muset použít eval.
3.8.2011 11:00 marek
Rozbalit Rozbalit vše Re: Bash indirect reference

Dobry den.

marek:~$ function enum () {
>     eval "echo \${#${1}[@]}"
>  }
marek:~$ pole=(nula jedna "dva tri")
marek:~$ enum pole
3
4.8.2011 23:39 Milan
Rozbalit Rozbalit vše Re: Bash indirect reference
Děkuji za uvedeni věcí na pravou míru... :D

Milan

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.