A função pode ecoar o valor que não recebeu como entrada

A função pode ecoar o valor que não recebeu como entrada

Eu sou novo no bash. Estou confuso sobre a forma como as funções funcionam nesta linguagem.

Eu escrevi este código:

#!/usr/bin/env sh

choice_func() {
        echo "$choice"
}

echo "Enter your choice:"
read choice
choice_func

Ao investigar meu código, percebi que esqueci de enviar o valor de choicecomo entrada ao chamar o choice_func(). Mas funciona corretamente! como é possível que a função não tenha recebido a entrada, mas pode echo?

Responder1

Você lê um valor na variável choicena parte principal do script. Esta variável tem escopo global (na falta de uma palavra melhor), o que significa que também estará visível dentro da função.

Observe que se você lesse o valor dentro da função, a variável ainda teria escopo global e seria visível fora da função (após a chamada da função). Este seria o caso, a menos que você o declarasse localdentro local choiceda função.

Para obter mais informações sobre o escopo da variável shell, consulte, por exemplo

Para passar o valor da variável choicepara a função, use

choice_func "$choice"

A função pode então acessar esse valor em $1seu primeiro parâmetro posicional:

choice_func () {
    echo "$1"
}

ou

choice_func () {
   local choice="$1"

   # choice is now local and separate from the variable
   # with the same name in the main script.

   echo "$choice"
}

Esta é a maneira correta de passar um valor para uma função semconfiandoem variáveis ​​globais em um script de shell.

Responder2

Porque você projetou sua função sem necessidade de argumento, só isso.

informação relacionada