LINUX.ORG.RU

Изящно раскидать строку по переменным

 


0

1

Суть такова: есть строка, содержащая IPv4 адрес. Есть ли способ в shell изящно раскидать каждый октет в отдельную переменную? То есть:

Было:

IP_ADDR="192.168.0.1"

Стало:

IP_ADDR_OCT1="192"
IP_ADDR_OCT2="168"
IP_ADDR_OCT3="0"
IP_ADDR_OCT4="1"

Можно конечно прибежать и к костылям, но хотелось бы более изящного решения.

Заранее благодарю за ответ.

★★★★★

IFS='.' read -a ip_addr <<< "192.168.0.1"
echo ${ip_addr[0]}
echo ${ip_addr[1]}
echo ${ip_addr[2]}
echo ${ip_addr[3]}
Lavos ★★★★★ ()
Ответ на: комментарий от Lavos

Хм. Насколько я понял это для bash. А в целевой системе его нет.

IPR ★★★★★ ()
Ответ на: комментарий от IPR

Универсально только с костылями, но и их может не быть.
csh+awk:

set ip_addr=`echo 192.168.0.1 | awk 'BEGIN{FS="."}{for (i=1; i<=NF; i++) print $i}'`
echo $ip_addr[1]
csh+tr:
set ip_addr=`echo 192.168.0.1 | tr '.' ' '`
echo $ip_addr[1]

Lavos ★★★★★ ()
Последнее исправление: Lavos (всего исправлений: 1)
Ответ на: комментарий от IPR

Насколько я понял это для bash. А в целевой системе его нет

Я всё понялл, не продолжай.
Из астрала мне уже начала поступать информация что там у тебя есть, чего нет, какой версии и тп.
Как только передача данных закончится - мы с вами свяжемся.

zolden ★★★★★ ()
Ответ на: комментарий от IPR

в бздуношелле тоже можно:

read o1 o2 o3 o4 <<INPUT
`echo $IPADDR | tr . " "`
INPUT
lazyklimm ★★★★★ ()
IP_ADDR_OCT_1=$(echo $IP_ADDR | cut -d . -f 1)
IP_ADDR_OCT_2=$(echo $IP_ADDR | cut -d . -f 2)
IP_ADDR_OCT_3=$(echo $IP_ADDR | cut -d . -f 3)
IP_ADDR_OCT_4=$(echo $IP_ADDR | cut -d . -f 4)
tiandrey ★★★★★ ()
Последнее исправление: tiandrey (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.