значение эха внутри переменной? - PullRequest
1 голос
/ 09 июня 2010

х = 102 у = х

означает, что когда я повторяю $ y, это дает x эхо $ у х - а не 102

и когда я повторяю $ x, это дает 102

Допустим, я не знаю, что внутри у

и я хочу, чтобы значение x отображалось при использовании y, например:

a=`echo $(echo $y)`
echo $a

Ответ 102

Ответы [ 2 ]

4 голосов
/ 09 июня 2010

Вы должны указать оболочке, что она будет оценивать вашу команду дважды - один раз, чтобы превратить $ y в x, и снова, чтобы получить значение $ x. Самый портативный способ, который я знаю, это сделать с помощью eval:

$ /bin/sh
$ x=100
$ y=x
$ echo $y
x
$ eval echo \$$y
100
$

(вам нужно экранировать первый $ в строке eval, потому что в противном случае первая оценка заменит $$ на текущий pid)

Если вас интересует только bash, лучше всего подходит метод KennyTM.

1 голос
/ 10 июня 2010

В ksh 93 (я не знаю, работает ли это в ksh 88):

$ x=102; typeset -n y=x
$ echo $x
102
$ echo $y
102
$ echo ${!y}
x

Неожиданно, две последние команды делают противоположное тому, что они делают в Bash (который не нуженпомечать переменную, используя typeset).

...