2016-05-12 5 views
0

Как это сделать в сценарии bash?Ссылка на добавленную переменную?

#!/bin/sh 

func() { 
export ${NAME}_SUFFIX=`result_of_some_command` 
} 

NAME=my_name 
func 

# This variable will become my_name_SUFFIX 
# but how can I reference it using $NAME? 

echo ${${NAME}_SUFFIX}  # Doesn't work... 

Я хотел бы использовать объявить если она будет работать через вызовы функций, но мне кажется, это не так. Кроме того, моя версия объявления не поддерживает -x.

+1

'объявляет -x' был поддержан, так как, по крайней мере' bash' 2.0.2. – chepner

+0

Извините, я имел в виду -g. – emperor

ответ

-1

Я знаю, что вы пытаетесь сделать ... предупреждение ... «Eval» ужасный способ сделать это, и переменная косвенность лучше. Но вот что вы просили.

Одно простое изменение вашего скрипта:

Изменить «экспорт» в «Eval», и он будет работать. Вы были в большинстве своем! О, и измените инструкцию «эхо», как показано ниже.

Пример:

#!/bin/sh 

func() { 
eval ${NAME}_SUFFIX=`result_of_some_command` 
} 

NAME=my_name 
func 

# This variable will become my_name_SUFFIX 
# but how can I reference it using $NAME? 

eval echo "\${${NAME}_SUFFIX}" 
+0

Я просто хочу снова подчеркнуть; переменная косвенность - лучший способ сделать это. Но, опять же, вот что вы просили. Дайте мне знать, если у вас возникнут проблемы. – jgshawkey

+0

Большое спасибо, это то, что я искал! – emperor

+0

@emperor, вы делаете ставку. Если это ответ, который вы искали, не забудьте отметить вопрос, как ответили. Береги себя! – jgshawkey

1

Вам нужно переменные окольные, который вводится с !:

var_name=test 
test=value 
echo ${var_name} # will echo test 
echo ${!var_name} # will echo value 
3

Вы можете использовать косвенное расширение параметра:

varname=${NAME}_SUFFIX 
echo "${!varname}" 

bash 4.3 также введена namerefs, которые являются немного проще в использовании.

$ NAME=FOO 
$ FOO_SUFFIX=3 
$ declare -n varname=${NAME}_SUFFIX 
$ echo $varname 
3 
+0

Да, но тогда я мог бы использовать varname для начала: export varname = 'result_of_some_command' Мне это нужно в форме $ \ $ {NAME} _SUFFIX} ish. – emperor

+0

'varname' используется вне' func'. Его значение - это имя переменной, значение которой вы хотите. – chepner

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