Como chamar subfunção de uma função diferente da função atual em ksh?

1

Neste cenário, é necessário chamar func1 de Main_Func . Como eu chamo isso?

Main_Func() {
<code>

}
Initialize_func() {

  func1() {

  <code>

  }

}
    
por Su_scriptingbee 12.01.2018 / 08:40

1 resposta

3

Para que func1 seja definido, primeiro você terá que chamar Initialize_func pelo menos uma vez. Então você pode chamar func1 como apenas func1 .

Exemplo:

outer1 () {
    echo 'in outer1'
    inner
}

outer2 () {
    echo 'in outer2'

    inner () {
        echo 'in inner'
    }
}

# First example explained below:
outer1

# Second example explained below:
outer2
outer1

Chamar outer1 sem chamar outer2 neste exemplo não funcionará, pois inner ainda não está definido:

$ ksh93 script.sh
in outer1
script.sh[3]: inner: not found [No such file or directory]

Chamando outer2 primeiro e, em seguida, outer1 funciona:

$ ksh93 script.sh
in outer2
in outer1
in inner

ksh colocará sua função func1 no mesmo "escopo" das outras funções. Não é como em C ++ ou outras linguagens orientadas a objetos que func1 de alguma forma se torna uma subfunção ou método em algum escopo interno de Initialize_func .

Isso ocorre independentemente de você usar a sintaxe da função shell Bourne como acima ou definir suas funções usando a palavra-chave function do shell Korn.

    
por 12.01.2018 / 08:48