2016-05-05 86 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" 

調用如下基:我想你期待像下面的代碼YYY_XXX_SK_REGISTER_template.ctl

+3

請解釋更好 – Troncador

+0

結果期待在回聲: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

請查看[editing-help](http://stackoverflow.com/editing-help)。 – Cyrus

2

如果

./test.sh YYY_XXX_SK_REGISTER 

結果回聲期待你不介意改變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 VS 的cTnI。 這個腳本,你想要做

#!/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' **並且當你信任輸入參數到'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