2016-05-05 1 views
0

У меня есть bash, как показано ниже, где я хочу использовать значение YYY_XXX_SK_REGISTER_CNTL в эхо.

#! /bin/bash 
TRADE_TYPE=$1 
YYY_XXX_SK_REGISTER_CNTL=YYY_XXX_SK_REGISTER_template.ctl 

echo $TRADE_TYPE"_CTNL" 

вызова базы, как показано ниже:

./test.sh YYY_XXX_SK_REGISTER 

результат, ожидающей в эхо: YYY_XXX_SK_REGISTER_template.ctl

+3

пожалуйста, объясните лучше – Troncador

+0

результат ожидающей в echo: YYY_XXX_SK_REGISTER_template.ctl, но в настоящее время получается: YYY_XXX_SK_REGISTER_CNTL. как получить результат желания? – sabya

+0

Вы не используете свою переменную: YYY_XXX_SK_REGISTER_CNTL. – Troncador

ответ

0

Я думаю, что вы ожидаете что-то вроде ниже код:

#!/bin/bash 
TRADE_TYPE=$1 

export TRADE_TYPE 

variable="$TRADE_TYPE"_template.ctl 

echo $variable 
+1

Обратите внимание на [edit-help] (http://stackoverflow.com/editing-help). – Cyrus

2

Если вы не возражаете изменить TRADE_TYPE или используя временную переменную, то вы можете использовать ${!var} расширение:

TRADE_TYPE="hello" 
hello_world=1234 
TRADE_TYPE="${TRADE_TYPE}_world" 
echo ${!TRADE_TYPE} 
# will print 1234 
+0

, если я передаю TRADE_TYPE в командной строке. Приведенный выше код не работает. У вас есть какое-либо решение для этого? я имею в виду, если я хотел бы передать это из командной строки – sabya

+0

@sabya. Вы должны уметь выяснить, как это сделать. – andlrc

1

Прежде всего, необходимо избавиться от опечатка, Cntl против CTNL. Этот скрипт делает то, что вы хотите

#!/bin/bash 

TRADE_TYPE=$1 
YYY_XXX_SK_REGISTER_CNTL=YYY_XXX_SK_REGISTER_template.ctl 

eval echo "\$${TRADE_TYPE}_CNTL" 

Существует, вероятно, лучшее решение, чем прибегать к Eval. Но вам придется объяснить, какова ваша общая цель.

+0

eval echo "\ $$ {TRADE_TYPE} _CNTL" дает результат, который я хотел, Спасибо за ответ. Я хочу использовать это значение в скрипте, вызывая переменную: YYY_XXX_SK_REGISTER_CNTL .. – sabya

+1

[eval is evil.] (http://mywiki.wooledge.org/BashFAQ/048) Использование 'eval' не рекомендуется. Используйте 'eval' только тогда, когда нет другого пути ** AND **, когда вы доверяете входным аргументам' eval'. См. Ответ andlrc на лучший способ сделать это. – anishsane

0

Использование косвенной переменной ссылки:

#! /bin/bash 

TRADE_TYPE="${1}_CNTL" 
YYY_XXX_SK_REGISTER_CNTL=YYY_XXX_SK_REGISTER_template.ctl 

echo "${!TRADE_TYPE}" 

Когда следующий вводится в командной строке:

./test.sh YYY_XXX_SK_REGISTER 

Ваш результат будет:

YYY_XXX_SK_REGISTER_template.ctl 
Смежные вопросы