O Getopts não funciona dentro da função

0

Estou tentando usar getops em uma função, mas parece que não funciona:

#!/bin/bash

function main()
{
  while getopts ":p:t:c:b:" o; do
    case "${o}" in
    p)
      echo "GOt P"
      p=$OPTARG
      ;;
    t)
      echo "GOt T"
      t=$OPTARG
      ;;
    c)
      echo "GOt C"
      c=$OPTARG
      ;;
    b)
      echo "GOt b"
      b=$OPTARG
      ;;
    *)
      #usage 
      echo "Unknown Option"
      return 
      ;;
      esac
  done

  echo $p
  echo $t
  echo $c
  echo $b
}

main

E depois executá-lo assim:

$ ./bin/testArguments.sh -p . -t README.md -c 234 -b 1

Eu tentei me certificar de que os optid são locais, mas isso também não funcionou. Qualquer outra coisa que possa estar errada?

    
por Dean 15.03.2018 / 08:49

2 respostas

6

Você não está passando nenhum argumento para a sua função main . Se você quiser que essa função obtenha os mesmos argumentos que foram passados para o script, passe-os junto com:

main "$@"

Em vez de:

main

Também relevante para o seu script:

por 15.03.2018 / 08:58
1

Em uma função, os parâmetros são aqueles passados para a função, não aqueles passados para o script:

$ cat foo.sh
function main ()
{
    echo "$@"
}

echo "$@"
main
$ bash foo.sh bar
bar

$

Você precisa passar "$@" para main :

main "$@"

Embora eu ache uma função main em scripts um pouco inútil, a menos que você simplesmente chame main de novo e de novo no mesmo script.

    
por 15.03.2018 / 08:59