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!!