
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 choice
como 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 choice
na 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 local
dentro local choice
da função.
Para obter mais informações sobre o escopo da variável shell, consulte, por exemplo
Para passar o valor da variável choice
para a função, use
choice_func "$choice"
A função pode então acessar esse valor em $1
seu 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.