Parâmetros posicionais não estão funcionando dentro de funções, o que faço? [RESOLVIDO]

1. Parâmetros posicionais não estão funcionando dentro de funções, o que faço? [RESOLVIDO]

Ricardo Farias
RickG4

(usa Ubuntu)

Enviado em 11/04/2020 - 18:27h

Estou com um problema muito estranho, escrevi o seguinte script para estudar parâmetros posicionais:
--------------------------------------------------------------------------------
#!/bin/bash
imprimir_parametros_posicionais () {
PALAVRAUM=$1
PALAVRADOIS=$2
PALAVRATRES=$3
echo "Palavra 1 eh $PALAVRAUM"
echo "Palavra 2 eh $PALAVRADOIS"
echo "Palavra 3 eh $PALAVRATRES"
}
imprimir_parametros_posicionais
--------------------------------------------------------------------------------
E curiosamente a saída desse comando é:
Palavra 1 eh
Palavra 2 eh
Palavra 3 eh

É como se eu não tivesse atribuído valor nenhum as variáveis! Escrevendo o mesmo código fora da função executa normalmente, o que pode ser isso? Ou é padrão não poder usar parâmetros posicionais dentro de funções? Sou iniciante no assunto :/




  


2. Re: Parâmetros posicionais não estão funcionando dentro de funções, o que faço? [RESOLVIDO]

Adriano Siqueira
adrisiq

(usa KDE Neon)

Enviado em 11/04/2020 - 20:22h

A sua função está tratando corretamente os parâmetros que ela recebe, o problema está na hora que você chama a sua função sem passar nenhum argumento para ela. Acho que você está querendo algo assim:
#!/bin/bash

function tratar() {
VAR1="$1"
VAR2="$2"
VAR3="$3"

echo "Variavel 1: $VAR1"
echo "Variavel 2: $VAR2"
echo "Variavel 3: $VAR3"
}

if [[ $# -ne 3 ]]; then
echo "Forneca 3 parametros para o script."
exit 1
fi

tratar "$1" "$2" "$3"
exit 0

Para usar o script, chame assim:
./script 1 2 3 

./script "fulano de tal" mora aqui 

./script nome1 nome2 nome3 

./script essa\ palavra tem espaco 



3. Re: Parâmetros posicionais não estão funcionando dentro de funções, o que faço? [RESOLVIDO]

Ricardo Farias
RickG4

(usa Ubuntu)

Enviado em 13/04/2020 - 14:27h

adrisiq escreveu:

A sua função está tratando corretamente os parâmetros que ela recebe, o problema está na hora que você chama a sua função sem passar nenhum argumento para ela. Acho que você está querendo algo assim:
#!/bin/bash

function tratar() {
VAR1="$1"
VAR2="$2"
VAR3="$3"

echo "Variavel 1: $VAR1"
echo "Variavel 2: $VAR2"
echo "Variavel 3: $VAR3"
}

if [[ $# -ne 3 ]]; then
echo "Forneca 3 parametros para o script."
exit 1
fi

tratar "$1" "$2" "$3"
exit 0

Para usar o script, chame assim:
./script 1 2 3 

./script "fulano de tal" mora aqui 

./script nome1 nome2 nome3 

./script essa\ palavra tem espaco 


Amigo, pior que to chamando a função corretamente também, passando os parâmetros (argumentos?) certinho, mas ela meio que não recebe, não atribui as variáveis sabe, será que eu devo reinstalar o linux? Talvez seja algum bug, não sei, o pior é que acontece somente dentro das funções, o mesmo código escrito fora das funções executa normalmente


4. Re: Parâmetros posicionais não estão funcionando dentro de funções, o que faço?

Matheus
pylm

(usa Gentoo)

Enviado em 13/04/2020 - 14:40h

RickG4 escreveu:

adrisiq escreveu:

A sua função está tratando corretamente os parâmetros que ela recebe, o problema está na hora que você chama a sua função sem passar nenhum argumento para ela. Acho que você está querendo algo assim:
#!/bin/bash

function tratar() {
VAR1="$1"
VAR2="$2"
VAR3="$3"

echo "Variavel 1: $VAR1"
echo "Variavel 2: $VAR2"
echo "Variavel 3: $VAR3"
}

if [[ $# -ne 3 ]]; then
echo "Forneca 3 parametros para o script."
exit 1
fi

tratar "$1" "$2" "$3"
exit 0

Para usar o script, chame assim:
./script 1 2 3 

./script "fulano de tal" mora aqui 

./script nome1 nome2 nome3 

./script essa\ palavra tem espaco 


Amigo, pior que to chamando a função corretamente também, passando os parâmetros (argumentos?) certinho, mas ela meio que não recebe, não atribui as variáveis sabe, será que eu devo reinstalar o linux? Talvez seja algum bug, não sei, o pior é que acontece somente dentro das funções, o mesmo código escrito fora das funções executa normalmente


Eu testei aqui também e a função não recebe eles, parece uma limitação do bash.



5. Re: Parâmetros posicionais não estão funcionando dentro de funções, o que faço? [RESOLVIDO]

Ricardo Farias
RickG4

(usa Ubuntu)

Enviado em 13/04/2020 - 14:42h

Estou usando o bash do Lubuntu, que já é normalmente um sistema limitado né, vou tentar testar em outro pra ver


6. Re: Parâmetros posicionais não estão funcionando dentro de funções, o que faço?

Matheus
pylm

(usa Gentoo)

Enviado em 13/04/2020 - 14:43h

Saquei, tens que botar elas na chamada da função, assim:


PALAVRAUM=$1
PALAVRADOIS=$2
PALAVRATRES=$3
echo "Palavra 1 eh $PALAVRAUM"
echo "Palavra 2 eh $PALAVRADOIS"
echo "Palavra 3 eh $PALAVRATRES"
}
imprimir_parametros_posicionais $1 $2 $3



./args_bash.sh batata maçã tomate
Palavra 1 eh batata
Palavra 2 eh maçã
Palavra 3 eh tomate


Edit: agora que eu vi que o usuário já tinha dado essa dica dia 11.


7. Re: Parâmetros posicionais não estão funcionando dentro de funções, o que faço? [RESOLVIDO]

Ricardo Farias
RickG4

(usa Ubuntu)

Enviado em 13/04/2020 - 15:01h

Na verdade deu certo sim, acabo de testar, eu que fui burro agora kkkkkk. É na hora de chamar ainda no código que eu devia ter modificado, eu tava chamando sem nenhum argumento, agora chamando com os argumentos deu certo, valeu aí galera!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts