2015-07-02 3 views
0

Я пытаюсь сделать мои сценарии более универсальными и, следовательно, пытаюсь передать параметр. У меня есть файл конфигурации, который содержит переменные (которые используются в скриптах) и в скриптах, я источник (исходная команда) файл в других сценариях (ksh).Двойной параметр в ошибке металирования скриптов оболочки

Файл конфигурации содержит:

p2020_m23_ORACLE_USERNAME=sanjeeb 

параметров для скрипта p2020_m23.

КШ сценарий:

export SOURCE_CD=$1 
export CONFIG_FILE=/user/spanda20/dbconfig.txt 
source $CONFIG_FILE 

USERNAME=${${SOURCE_CD}_ORACLE_USERNAME} << **This throws error** >> 
USERNAME=$p2020_m23_ORACLE_USERNAME <<< **This gives correct result** >> 

ручной тест:

[spanda2 config]$ export SOURCE_CD=p2020_m23 
[spanda2 config]$ export m23_ORACLE_USERNAME=sanjeeb 
[spanda2 config]$ export USERNAME=${${SOURCE_CD}_ORACLE_USERNAME} 
-bash: USERNAME=${${SOURCE_CD}_ORACLE_USERNAME}: bad substitution 
+0

См. [Bash FAQ 006] (http://mywiki.wooledge.org/BashFAQ/006) (он также рассказывает о ksh) для всей этой темы. –

ответ

0
USERNAME_REF="${SOURCE_CD}_ORACLE_USERNAME" 
USERNAME="${!USERNAME_REF}" 
+0

[spanda20job] $ экспорт SOURCE_CD = p2020_m23 [spanda20 работа] $ экспорт p2020_m23_ORACLE_USERNAME = sanjeeb [spanda20 работа] $ USERNAME_REF = "$ {SOURCE_CD} _ORACLE_USERNAME" [spanda20job] $ USERNAME = "$ {! USERNAME_REF}" [ spanda20 job] $ echo $ USERNAME sanjeeb – user3858193

0

${parameter} -The значение параметра подставляется поэтому если вы хотите добавить значение 2 переменных и назначить в Другие . Вы должны быть написаны в этом, как

export SOURCE_CD=p2020_m23 
    export m23_ORACLE_USERNAME=sanjeeb 
    export USERNAME="${SOURCE_CD}_${ORACLE_USERNAME}" 
0

В KSH вы можете использовать переменную косвенность с typeset -n или nameref.

Простой пример:

$ typeset -n that 
    $ this=word 
    $ that=this 
    $ echo $that 
    word 
    $ this=nothing 
    $ echo $that 
    nothing 

Имя ссылка теперь делает $that возвращения текущего значения $this.

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