Redirect output to a bash array

前端 未结 5 1210
感动是毒
感动是毒 2020-12-14 02:39

I have a file containing the string

ipAddress=10.78.90.137;10.78.90.149

I\'d like to place these two IP addresses in a bash array. To achie

5条回答
  •  有刺的猬
    2020-12-14 03:13

    do you really need an array

    bash

    $ ipAddress="10.78.90.137;10.78.90.149"
    $ IFS=";"
    $ set -- $ipAddress
    $ echo $1
    10.78.90.137
    $ echo $2
    10.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/bash
    declare -a arr
    while IFS="=" read -r caption addresses
    do
     case "$caption" in 
        ipAddress*)
            addresses=${addresses//[\"]/}
            arr=( ${arr[@]} ${addresses//;/ } )
     esac
    done < "file"
    echo ${arr[@]}
    

    output

    $ more file
    foo
    bar
    ipAddress="10.78.91.138;10.78.90.150;10.77.1.101"
    foo1
    ipAddress="10.78.90.137;10.78.90.149"
    bar1
    
    $./shell.sh
    10.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
    

提交回复
热议问题