Redirect output to a bash array
do you really need an array
bash
$ ipAddress="10.78.90.137;10.78.90.149"$ IFS=";"$ set -- $ipAddress$ echo $110.78.90.137$ echo $210.78.90.149$ unset IFS$ echo $@ #this is "array"
if you want to put into array
$ a=( $@ )$ echo ${a[0]}10.78.90.137$ echo ${a[1]}10.78.90.149
@OP, regarding your method: set your IFS to a space
$ IFS=" "$ n=( $(grep -i ipaddress file | cut -d'=' -f2 | tr ';' ' ' | sed 's/"//g' ) )$ echo ${n[1]}10.78.90.149$ echo ${n[0]}10.78.90.137$ unset IFS
Also, there is no need to use so many tools. you can just use awk, or simply the bash shell
#!/bin/bashdeclare -a arrwhile IFS="=" read -r caption addressesdo case "$caption" in ipAddress*) addresses=${addresses//[\"]/} arr=( ${arr[@]} ${addresses//;/ } ) esacdone < "file"echo ${arr[@]}
output
$ more filefoobaripAddress="10.78.91.138;10.78.90.150;10.77.1.101"foo1ipAddress="10.78.90.137;10.78.90.149"bar1$./shell.sh10.78.91.138 10.78.90.150 10.77.1.101 10.78.90.137 10.78.90.149
gawk
$ n=( $(gawk -F"=" '/ipAddress/{gsub(/\"/,"",$2);gsub(/;/," ",$2) ;printf $2" "}' file) )$ echo ${n[@]}10.78.91.138 10.78.90.150 10.77.1.101 10.78.90.137 10.78.90.149
A variation on a theme:
$ line=$(grep -i ipaddress /opt/ipfile)$ saveIFS="$IFS" # always save it and put it back to be safe$ IFS="=;"$ n=($line)$ IFS="$saveIFS"$ echo ${n[0]}ipAddress$ echo ${n[1]}10.78.90.137$ echo ${n[2]}10.78.90.149
If the file has no other contents, you may not need the grep
and you could read in the whole file.
$ saveIFS="$IFS"$ IFS="=;"$ n=$(</opt/ipfile)$ IFS="$saveIFS"