Não use function port() - na verdade, não faz sentido. Ao declarar uma função bash ou ksh com o comando function você não usa o () , mas o shell aceita como uma sintaxe perdoável oops e age como se você não tivesse usado function . Então não faça.
port()
case ${1:--} in (B) OPT_B=8000;; (*[!0-9]*)
! printf 'chosen value %s not in %s\n' \
"${1:-''}" "'1 - 10000'" ;;
(*) [ "$(( $1>0 && $1<10001 ))" -ne 0 ] &&
echo "chosen value '$1'" ||
port "'$1'" ;;
esac
Essa é uma maneira POSIXly correta de escrever sua função (exceto que o acima retorna corretamente em caso de erro) . Se o acima estivesse em um script de shell diferente de $0 e eu quisesse chamar essa função de qualquer maneira, provavelmente faria:
eval "$(sed '/^port()/,$!d;/esac/q' /path/to/script_containing_port.sh)"
port B #or whatever
... se eu pudesse ter certeza de que a primeira ocorrência de ^port() nesse script definitivamente significava o início da função que queria declarar. Senão, se a função estivesse em um script próprio, eu faria:
. /path/to/port.fn.sh; port B
Por fim, você provavelmente não deve nomear seus arquivos de script something.sh a menos que eles realmente sejam sh scripts - o que significa que, se você escrever um nome de script bash , something.bash . Não faz sentido de outra forma.