Видео смотреть бесплатно

Смотреть красивый видео

Официальный сайт rostobrnadzor 24/7/365

Смотреть видео бесплатно

trace 23.11.2012 18:28

Есть вопрос!что делать если не возможно использовать ассоциативный массив bash

Всем привет.
Вопрос следующий.
Есть две переменные, их необходимо совместить.
поясню
ftp_port=21
service=ftp

нужно вывести склеенную переменную ,что-то вроде этого $(${service}_port)

т.е. должно получиться аналогично $ftp_port


Тэги:
+ 0 -
Похожие Поделиться

dieformetal 23.11.2012 18:45 #
+ 0 -
Нужно получить имя переменной, или значение, содержащее $ftp_port ?
xoy 23.11.2012 19:19 #
+ 0 -
1
2
3
ftp_port=21
service=ftp
echo ${service}_${ftp_port}


или

1
2
3
4
ftp_port=21
service=ftp
string=$(echo ${service}_${ftp_port})
echo $string


trace 23.11.2012 21:43 #
+ 0 -
Немного не так, service может быть разный, исходя из service надо выбирать порт.
Замысел такой
service=$1
ftp_port=21
http_port=80
и т.д.
исходя из этого надо выдергивать нужный порт
на выходе должно быть ${service}_port , но почему-то выводит service_port , а должно 21
dront78 23.11.2012 22:03 #
+ 0 -
осмотрите на тему - словарь или map
вроде был в баше
dront78 23.11.2012 22:12 #
+ 0 -
Bash Associative Arrays
trace 24.11.2012 04:49 #
+ 1 -
К сожалению у меня bash ниже 4-ой версии.
Нашел такое решение
port_ftp=21; service=ftp; i="port_$service"; echo "${!i}"
cppmm 24.11.2012 09:24 #
+ 2 -
Вообще, да, можно использовать косвенные ссылки:
 1
2
3
4
5
6
7
8
9
10
#!/bin/bash

SERVICE=$1

PORT=${SERVICE}_PORT

FTP_PORT="21"
HTTP_PORT="80"

echo ${!PORT}


Но это, имхо, кривовато, потому что подразумевает хранение данных в коде. Для простого случая с двумя портами это не страшно, но вот в чём-нибудь более крупном для удобства дальнейшего редактирования, лучше использовать именно ассоциативный массив, а не подстановки переменных, т.е.:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

SERVICE=$1

SERVICES="FTP:21 HTTP:80"

for VAR in $SERVICES
do
if [ ${VAR%:*} == ${SERVICE} ]
then
PORT=${VAR#*:}
echo $PORT
fi
done

ananas 24.11.2012 09:57 #
+ 1 -
 1
2
3
4
5
6
7
8
9
10
ftp_port=21
http_port=80

service=ftp
eval port=\$${service}_port
echo $port

service=http
eval port=\$${service}_port
echo $port

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн