LINUX.ORG.RU

Телепаты в отпуске!

(язык?)

Die-Hard ★★★★★
()

на каком языке??

на С - никак

на sh кажись ${$VARNAME} или через eval

cvv ★★★★★
()

(victor@pts/1)~ $> a=3                                                     [sh]
(victor@pts/1)~ $> b=a                                                     [sh]
(victor@pts/1)~ $> eval echo \$$b                                          [sh]
3
(victor@pts/1)~ $>                                                         [sh]

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

>это спрашивают раз в полтора месяца

в факу нада !

CMEPTb
()

zsh: (из фака, лично мною переведённого)
Проблема такая - у вас есть переменная $E, содержащая строку EDITOR, и переменная $EDITOR, содержащая строку emacs, или что-нибудь подобное. Как вы доберётесь от $E до emacs одним этапом?


Стандартного способа нет, чтобы это сделать. Тем не менее, в zsh есть идиома (доступна во всех версиях zsh, начиная с 3.0) для этого:


print ${(e)E:+\$$E}


Пока проигнорируйте (e). :+ значит: если переменная $E задана, заменить следующим, т.е. \$$E. Это расширяется до $EDITOR по обычным правилам. Наконец, (e) обозначает `оцените выражение, которое вы только что сделали'. Это даст emacs.

Чтобы сделать это стандартными средствами, воспользуйтесь eval:


eval echo \$$E


произведёт такой же результат.

Версии, начиная с 3.1.6, позволяют вам делать это непосредственно через новые флаги; ${(P)E}.


Иногда люди замечают, что синтаксис ${${E}} правильный и ожидают, что у него есть этот эффект. Возможно должен, но в первые дни существования zsh было найдено удобным делать различные замены через одинаковый параметр; например, ${${file##**/}%.*} удаляет всё до последнего слеша в файле $file, затем всё от последней точки, включая и её(попробуйте, будет работать!). Т.ч. в ${${E}}, внутренние ${...} в действительности ничего не делают.

UVV ★★★★★
()

На python'е

>>> a = 2
>>> b = 'a'
>>> eval(b)
2
>>>

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.