Snipeshot
Snipeshot

Reputation: 23

Bash How can I use read command to assign multiple words to 1 variable

I am trying to get multiple words/arguments into one variable with read. I tried assigning it into an array and using while loop to put all the elements in the array into 1 string.

    read -a info
    i=0
    datastring=""
    while [ $i -lt ${info[@]} ] 
    do
        datastring=$datastring${info[i]}
    done
    echo "$dataString"

When I run the program it just doesn't do anything and sits there and won't print out datastring and I'm kinda lost on any other way to do it.

Upvotes: 2

Views: 2013

Answers (1)

glenn jackman
glenn jackman

Reputation: 246877

read datastring <<<"this sentence contains multiple words"
echo "$datastring"

If you already have an array

datastring=${info[*]}

Will concatenate the array into a single word, using the 1st char of $IFS as a separator. If you want the words all smushed together with no separators, you could do this:

datastring=""
for word in "${info[@]}"; do datastring+=$word; done

or this:

datastring=$(IFS=""; echo "${info[*]}")

or this:

datastring=${info[*]}
datastring=${datastring// /}

Note, all quotes and array indices (* vs @) have been carefully chosen: see
http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion and
http://www.gnu.org/software/bash/manual/bashref.html#Arrays

Upvotes: 3

Related Questions