trace 23.11.2012 18:28
Есть вопрос! — что делать если не возможно использовать ассоциативный массив bash
Всем привет.Вопрос следующий.
Есть две переменные, их необходимо совместить.
поясню
ftp_port=21
service=ftp
нужно вывести склеенную переменную ,что-то вроде этого $(${service}_port)
т.е. должно получиться аналогично $ftp_port
dieformetal 23.11.2012 18:45 #
+ 0 -
Нужно получить имя переменной, или значение, содержащее $ftp_port ?
Немного не так, service может быть разный, исходя из service надо выбирать порт.
Замысел такой
service=$1
ftp_port=21
http_port=80
и т.д.
исходя из этого надо выдергивать нужный порт
на выходе должно быть ${service}_port , но почему-то выводит service_port , а должно 21
Замысел такой
service=$1
ftp_port=21
http_port=80
и т.д.
исходя из этого надо выдергивать нужный порт
на выходе должно быть ${service}_port , но почему-то выводит service_port , а должно 21
К сожалению у меня bash ниже 4-ой версии.
Нашел такое решение
port_ftp=21; service=ftp; i="port_$service"; echo "${!i}"
Нашел такое решение
port_ftp=21; service=ftp; i="port_$service"; echo "${!i}"
Вообще, да, можно использовать косвенные ссылки:
Но это, имхо, кривовато, потому что подразумевает хранение данных в коде. Для простого случая с двумя портами это не страшно, но вот в чём-нибудь более крупном для удобства дальнейшего редактирования, лучше использовать именно ассоциативный массив, а не подстановки переменных, т.е.:
1 |
|
Но это, имхо, кривовато, потому что подразумевает хранение данных в коде. Для простого случая с двумя портами это не страшно, но вот в чём-нибудь более крупном для удобства дальнейшего редактирования, лучше использовать именно ассоциативный массив, а не подстановки переменных, т.е.:
1 |
#!/bin/bash
|