up vote 3 down vote favorite
1
share [g+] share [fb]

Here is a LIST:

List = "abcd 1234 jvm something"

How to get the second element "1234" without looping all the list?

link|improve this question

feedback

2 Answers

up vote 7 down vote accepted

no spaces between equal sign

$ List="abcd 1234 jvm something"
$ set -- $List
$ echo $2
1234

Some other ways, although not as efficient as using shell's internals

$ echo $List | cut -d" " -f2
1234
$  echo $List | awk '{print $2}'
1234
$ echo $List | sed 's/^.[^ \t]* //;s/ .*//'
1234
$ echo $List | tr " " "\n"|sed -n '2p'
1234
link|improve this answer
Thanks.would you give some comments in the code please? – SpawnST Mar 19 '10 at 3:32
I mean the second line. – SpawnST Mar 19 '10 at 3:32
3  
@Spawn set -- $something splits $something at the $IFS character (by default space) and assigns the split parts to the positional variables $1,$2,... – honk Mar 19 '10 at 3:44
@honk:Thank you:-) – SpawnST Mar 19 '10 at 3:46
feedback

Just to supplement ghostdog's answer: you could also put $List's elements into an array and access the specific list element from there

List="abcd 1234 jvm something"
arr=($List)
echo ${arr[1]}

Note that the array indices are counted 0,1,2,... .

This has the advantage of not polluting the shell environment with too many new variables.

link|improve this answer
That's nice.:-) – SpawnST Mar 19 '10 at 4:45
1  
no need to echo: arr=($List) – user31894 Mar 19 '10 at 5:19
@ghostdog probably compulsive behavior, edited. – honk Mar 19 '10 at 5:41
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.