≡ Menu

HowTo: Bash Shell Split String Into Array

How do I split string based on delimiter into array under Bash shell?

You need to use the $IFS. It is a special shell variable. You can change the value of IFS as per your requirements. The Internal Field Separator (IFS) that is used for word splitting after expansion and to split lines into words with the read builtin command. The default value is <space><tab><newline>. You can print it with the following command:
cat -etv <<<"$IFS"

$IFS variable is commonly used with read command, parameter expansions and command substitution.


Create a variable called ns as follows:

ns="ns1.cyberciti.biz ns2.cyberciti.biz ns3.cyberciti.biz"

To split $ns variable (string) into array, use the following IFS syntax:

IFS=' '
read -a dnsservers <<< "${ns}"

OR use one liner as follows:

IFS=' ' read -a dnsservers <<< "${ns}"

To display values stored in an array, enter:

echo ${dnsservers[0]}

Sample outputs:


Use bash for loop to iterate through array values i.e. print all elements using bash for loop syntax:

for i in "${dnsservers[@]}"
   echo "$i"
Share this tutorial on:

Like this? Follow us on Twitter OR support us by using Patreon

{ 6 comments… add one }
  • bAsh December 14, 2012, 9:29 pm

    You could also do:

    ns=(ns1.cyberciti.biz ns2.cyberciti.biz ns3.cyberciti.biz)
    # ${ns} becomes an array:
    echo ${ns[1]}  ${ns[2]}  ${ns[3]}
    • RAJ December 18, 2012, 9:32 am

      can u plz tell me all syntex and contitions for c , c++ program……

  • fufo December 16, 2012, 5:13 pm

    ns=”ns1.cyberciti.biz ns2.cyberciti.biz ns3.cyberciti.biz”



    for i in $ns;do A[$n]=$i; ((n++));done

    echo ${A[0]}
    echo ${A[1]}
    echo ${A[2]}
    echo ${A[3]}

  • Roger December 20, 2012, 5:21 pm

    Just FYI:

    “The default value is .”

    That stmt got messed-up in the html-formatting of your article.
    I can see in the html-code, you meant to write:
    “The default value is (space)(tab)(newline).”
    which is correct :)

  • todds September 29, 2015, 12:33 pm

    As the guy above me said, space,tab,newline are the default delimiters.
    If your input string is already separated by spaces, bash will automatically put it into an array:
    array=( H E L L O ) # you don’t even need quotes
    array[0] $ = H

    if you wanted to accept other ascii chars (say you’re converting to hex for some reason)
    array=(H E L L O “#” “!” ) #some chars you’ll want to use the quotes

    cat test.txt
    test1 test2 test3

    array=($( cat test.txt ))
    array[0] = test1

    array=($( ls directory/ )) #ls by default will output each dir on a new line, so each subdir or whatever ls returns becomes an array element

    array[0] = /home/user

    One last thing: array=( ${array[@]} “test” ) will add “test” string to an array. Say if you wanted to add the result of a bunch of different directories…
    array=( ${array[@]} “`ls /home/`” “`ls /home/user`” “`ls /proc/sys/`” ) and so on, note the ` backtics ` this time.

Security: Are you a robot or human?

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">

   Tagged with: , , , , ,