Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Here is a LIST:

List = "abcd 1234 jvm something"

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

share|improve this question
up vote 26 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
share|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
12  
@Spawn set -- $something splits $something at the $IFS character (by default space) and assigns the split parts to the positional variables $1,$2,... – Benjamin Bannier Mar 19 '10 at 3:44
    
@honk:Thank you:-) – SpawnST Mar 19 '10 at 3:46

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.

share|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. – Benjamin Bannier Mar 19 '10 at 5:41

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .