Eu acho que há mais para isso:
Ou esse não é o comando que você está usando - ou então, em algum outro lugar da função que você está fazendo de forma diferente. Esse erro vem de ${1?}
. Ou vem do seu teste, mas somente se você fizer set -u
.
Para consertar isso, pare de fazer isso. Do set +u; fn_name
, e veja o que acontece. E se você tiver qualquer ${1?}
de expansões, o erro não desaparecerá até você dar à função um argumento.
Aqui estão alguns exemplos de código de como você pode reproduzir esse erro:
sh -c 'fn(){ [ ! -n "${1?}" ]; }; fn'
sh: 1: 1: parameter not set
... ou ...
sh -uc 'fn(){ [ ! -n "$1" ]; }; fn'
sh: 1: 1: parameter not set
... mas ...
sh -uc 'fn(){ [ ! -n "$1" ]; }
set +u; fn; echo "$?"'
0
... e ...
sh -c 'fn(){ [ ! -n "${1?}" ]; }
fn some args; echo "$?"'
1
Se a função estiver configurando -u
, provavelmente você deve editar isso. Ou então se o seu .profile
estiver fazendo isso, o mesmo acontece. Na maioria dos casos, set -u
é não uma configuração de shell persistente desejável, e isso ocorre porque esse modo é projetado para matar shells. Ele não fornece nenhum meio simples de lidar com os tipos de erros que gera - que é o que você está tentando fazer com [
test ]
.