FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Fedora User

 
 
LinkBack Thread Tools
 
Old 02-16-2012, 07:43 AM
Patrick Lists
 
Default OT: Bash arrays & indirection?

Hi,

I am trying to do the following in bash:

OPTIONS = ( alfa beta gamma )
SUBOPTIONS_alfa = ( alfa0 alfa1 )
count=0
SETCOUNT = ${#SUBOPTIONS_${OPTIONS[$count]}[@]}

The SETCOUNT line gives a substitution error. I would like the
${OPTIONS[$count]} to be substituted with alfa so SETCOUNT is:


SETCOUNT = ${#SUBOPTIONS_alfa[@]} which should equal 2.

Anyone have an idea how I can make this work? Quick and dirty is fine. I
have already been told that it should be done differently. I appreciate
that but right now I just want to make it work.


Thanks!
Patrick
--
users mailing list
users@lists.fedoraproject.org
To unsubscribe or change subscription options:
https://admin.fedoraproject.org/mailman/listinfo/users
Guidelines: http://fedoraproject.org/wiki/Mailing_list_guidelines
Have a question? Ask away: http://ask.fedoraproject.org
 
Old 02-16-2012, 10:13 AM
Ian Malone
 
Default OT: Bash arrays & indirection?

On 16 February 2012 08:43, Patrick Lists <fedora-list@puzzled.xs4all.nl> wrote:
> Hi,
>
> I am trying to do the following in bash:
>
> OPTIONS = ( alfa beta gamma )
> SUBOPTIONS_alfa = ( alfa0 alfa1 )
> count=0
> SETCOUNT = ${#SUBOPTIONS_${OPTIONS[$count]}[@]}
>
> The SETCOUNT line gives a substitution error. I would like the
> ${OPTIONS[$count]} to be substituted with alfa so SETCOUNT is:
>
> SETCOUNT = ${#SUBOPTIONS_alfa[@]} which should equal 2.
>
> Anyone have an idea how I can make this work? Quick and dirty is fine. I
> have already been told that it should be done differently. I appreciate that
> but right now I just want to make it work.
>

Pushing the limits of what can be done with bash, it's just about
possible. As you mention this is the point you should consider
translating to another language. Anyway...

http://stackoverflow.com/questions/4582137/bash-indirect-array-addressing

Also N.B. shouldn't be any spaces around those equals signs in your example.

OPTIONS=( alfa beta gamma )
SUBOPTIONS_alfa=( alfa0 alfa1 )
SUBOPTIONS_beta=( beta_1 )
SUBOPTIONS_gamma = ( gamma_1 gamma_2 gamma_3 )
count=0
#then...
for count in {0..2} ; do
nameSUBOPTS=SUBOPTIONS_${OPTIONS[$count]}[@]
tmpARR=(${!nameSUBOPTS}) #You need tmpARR, because the '#' expansion
wont work with '!'
SETCOUNT=${#tmpARR[@]}
echo ${OPTIONS[$count]}:$SETCOUNT
done

Finally, it's spelt 'alpha'

--
imalone
--
users mailing list
users@lists.fedoraproject.org
To unsubscribe or change subscription options:
https://admin.fedoraproject.org/mailman/listinfo/users
Guidelines: http://fedoraproject.org/wiki/Mailing_list_guidelines
Have a question? Ask away: http://ask.fedoraproject.org
 
Old 02-16-2012, 02:41 PM
Patrick Lists
 
Default OT: Bash arrays & indirection?

On 16-02-12 12:13, Ian Malone wrote:

On 16 February 2012 08:43, Patrick Lists<fedora-list@puzzled.xs4all.nl> wrote:

Hi,

I am trying to do the following in bash:

OPTIONS = ( alfa beta gamma )
SUBOPTIONS_alfa = ( alfa0 alfa1 )
count=0
SETCOUNT = ${#SUBOPTIONS_${OPTIONS[$count]}[@]}

The SETCOUNT line gives a substitution error. I would like the
${OPTIONS[$count]} to be substituted with alfa so SETCOUNT is:

SETCOUNT = ${#SUBOPTIONS_alfa[@]} which should equal 2.

Anyone have an idea how I can make this work? Quick and dirty is fine. I
have already been told that it should be done differently. I appreciate that
but right now I just want to make it work.



Pushing the limits of what can be done with bash, it's just about
possible. As you mention this is the point you should consider
translating to another language. Anyway...

http://stackoverflow.com/questions/4582137/bash-indirect-array-addressing


I missed that one. Good link.


Also N.B. shouldn't be any spaces around those equals signs in your example.

OPTIONS=( alfa beta gamma )
SUBOPTIONS_alfa=( alfa0 alfa1 )
SUBOPTIONS_beta=( beta_1 )
SUBOPTIONS_gamma = ( gamma_1 gamma_2 gamma_3 )
count=0
#then...
for count in {0..2} ; do
nameSUBOPTS=SUBOPTIONS_${OPTIONS[$count]}[@]
tmpARR=(${!nameSUBOPTS}) #You need tmpARR, because the '#' expansion
wont work with '!'
SETCOUNT=${#tmpARR[@]}
echo ${OPTIONS[$count]}:$SETCOUNT
done


Thanks! I will try it out. It looks more sane that what I found myself
which apparently is challenging the bash gods to unleash their wrath if
I use it:


eval SETCOUNT=${#SUBOPTIONS_${OPTIONS[$count]}[@]}


Finally, it's spelt 'alpha'


Heh spelt or spelled? Actually I was thinking about the cars but
thought alfa bentley corvette was lame so went with alfa beta and gamma.


Thank you for helping out.

Cheers,
Patrick
--
users mailing list
users@lists.fedoraproject.org
To unsubscribe or change subscription options:
https://admin.fedoraproject.org/mailman/listinfo/users
Guidelines: http://fedoraproject.org/wiki/Mailing_list_guidelines
Have a question? Ask away: http://ask.fedoraproject.org
 
Old 02-16-2012, 03:48 PM
Ian Malone
 
Default OT: Bash arrays & indirection?

On 16 February 2012 15:41, Patrick Lists <fedora-list@puzzled.xs4all.nl> wrote:
> On 16-02-12 12:13, Ian Malone wrote:
>>
>> On 16 February 2012 08:43, Patrick Lists<fedora-list@puzzled.xs4all.nl>
>> *wrote:
>>>
>>> Hi,
>>>
>>> I am trying to do the following in bash:
>>>
>>> OPTIONS = ( alfa beta gamma )
>>> SUBOPTIONS_alfa = ( alfa0 alfa1 )
>>> count=0
>>> SETCOUNT = ${#SUBOPTIONS_${OPTIONS[$count]}[@]}
>>>

>> nameSUBOPTS=SUBOPTIONS_${OPTIONS[$count]}[@]
>> tmpARR=(${!nameSUBOPTS}) #You need tmpARR, because the '#' expansion
>> wont work with '!'
>> SETCOUNT=${#tmpARR[@]}
>> echo ${OPTIONS[$count]}:$SETCOUNT
>> done
>
>
> Thanks! I will try it out. It looks more sane that what I found myself which
> apparently is challenging the bash gods to unleash their wrath if I use it:
>
> eval SETCOUNT=${#SUBOPTIONS_${OPTIONS[$count]}[@]}
>

Yes, I'd meant to mention you could always use eval, but the quoting
introduced by each additional layer of indirection will eventually
cause brain damage.

>> Finally, it's spelt 'alpha'
>
>
> Heh spelt or spelled?

Universal law of pedantry in action...

--
imalone
--
users mailing list
users@lists.fedoraproject.org
To unsubscribe or change subscription options:
https://admin.fedoraproject.org/mailman/listinfo/users
Guidelines: http://fedoraproject.org/wiki/Mailing_list_guidelines
Have a question? Ask away: http://ask.fedoraproject.org
 

Thread Tools




All times are GMT. The time now is 06:56 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org