вы действительно нужен массив
Баш
$ 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 [email protected] #this is "array"
, если вы муравей поместить в массив
$ a=([email protected])
$ echo ${a[0]}
10.78.90.137
$ echo ${a[1]}
10.78.90.149
@OP, относительно вашего метода: установить ваш СИФ в пространство
$ 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
Кроме того, нет необходимости использовать так много инструментов. Вы можете просто использовать AWK или просто Баш оболочки
#!/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[@]}
выход
$ 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
поглазеть
$ 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
Значения используются позже в скрипте. Если они хранятся в массиве, это упростит итерацию и выполнение других операций над ними, следовательно, необходимо сохранить их в массиве. Метод, который вы описываете, должен мне помочь. Благодаря! Не могли бы вы поделиться своими мыслями о том, почему метод, который я использую, не работает? – calvinkrishy
см. Мое редактирование. одним из способов является установка IFS. – ghostdog74
Спасибо. Выучили несколько новых трюков сегодня! – calvinkrishy