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 ] .