2015-04-14 2 views
0

Вот сценарий: предположим, я установил позиционные переменные:Как использовать Eval для чтения переменных

set 1 2 3 4 
eval "args_$1=something" 

как я прочитал args_1, args_2, args_3 ... переменные я пытался

echo $args_$1 

и это тоже не работает

eval "\$$(echo arg_$1)" 

Как получить значение $ arg_1, чтобы кадрир заложить на клемму или перейти к функции и т. д.

+1

http://mywiki.wooledge.org/BashFAQ/006 –

+0

Использование eval не рекомендуется, но вы можете попробовать: установить 1 2 3 4; eval arg_ $ 1 = koba; eval echo $ \ 'echo arg_ $ 1 \' –

+1

Ответ, который я наиболее сильно одобряю из связанного вопроса, кстати, http://stackoverflow.com/a/16973754/14122 - который, в данном случае, означало бы что-то вроде 'printf -v '$ args_ $ 1"% s value' –

ответ

1
$ set 1 2 3 4; eval arg_$1=koba; eval echo $`echo arg_$1` 
koba 

PS: Использование eval не рекомендуется.

+0

Можете ли вы поделиться другими способами? – Superdav

2

Без Eval:

$ set 1 2 3 4 
$ var="args_$1" 
$ declare "$var=foo" 
$ echo "$var" 
args_1 
$ echo "${!var}" 
foo 

Это использует indirect variable.

Смежные вопросы