Решено: Присвоение значения переменной (если имя переменной является значением другой переменной)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
trancefer
Сообщения: 485
Статус: $>
ОС: Arch, Slackware, OpenBSD

Решено: Присвоение значения переменной

Сообщение trancefer »

Hi, folks!

Поясню примером. Допустим есть:

Возможно ли (каким образом?) создать новую переменную bar (забрав как $foo) и присвоить ей какое-либо значение, т.е . по смыслу получить нечто похожее на

Код: Выделить всё

$foo=baz

Надеюсь, понятно выразил мысль.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Решено: Присвоение значения переменной

Сообщение /dev/random »

1) универсальный, но небезопасный способ:
eval "имя=значение"
В этом случае передаваемый текст нужно дважды экранировать, что может быть сложно при вставке из переменной, и этого способа лучше избегать.
2) универсальный, безопасный, но с побочными эффектами:
export "имя=значение"
Побочный эффект: переменная экспортируется.
3) безопасный, без побочных эффектов, но bash-only:
declare -g "имя=значение"
(без -g если переменная локальная для функции)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Решено: Присвоение значения переменной

Сообщение drBatty »

trancefer писал(а):
08.09.2013 14:01
Возможно ли (каким образом?) создать новую переменную bar (забрав как $foo) и присвоить ей какое-либо значение, т.е . по смыслу получить нечто похожее на

можно. Но не нужно.

Hint: я не знаю, что у вас за задача, но вангую, что вам пригодится ассоциативный массив:

$

drb@amilo:~$ declare -A array drb@amilo:~$ foo="bar" drb@amilo:~$ array[$foo]="xyz" drb@amilo:~$ echo ${array["bar"]} xyz drb@amilo:~$ echo ${array[$foo]} xyz drb@amilo:~$ foo="a b c" drb@amilo:~$ array[$foo]="ZZZ" drb@amilo:~$ echo ${array[$foo]} ZZZ



Это bash-only способ.




для полноты картины

$

for index in "${!array[@]}"; do echo "index: '$index', array[index]: '${array[$index]}'"; done index: 'a b c', array[index]: 'ZZZ' index: 'bar', array[index]: 'xyz'

http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
trancefer
Сообщения: 485
Статус: $>
ОС: Arch, Slackware, OpenBSD

Re: Решено: Присвоение значения переменной

Сообщение trancefer »

Воспользовался eval, declare -g работает начиная с Bash 4.2.

drBatty
Ассоциативный массив пригодился в другом месте :)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Решено: Присвоение значения переменной

Сообщение drBatty »

trancefer
дело ваше, но помните, что eval достаточно опасная штука, и ВНЕЗАПНО может исполнить не ваш код, а код злоумышленника.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Ответить