/ / Por que testar com -f em bash retorna verdadeiro quando nenhum argumento é fornecido para o teste? [duplicado] - bash, shell, ubuntu, script

Por que testar com -f no bash retorna true quando nenhum argumento é fornecido ao teste? [duplicado] - bash, shell, ubuntu, scripting

Eu tenho o seguinte trecho de código em um arquivo de script:

if [ -f $FILEPATH ] ; then
cp $FILEPATH ~/some/other/dir
fi

Agora, devido a um erro neste mesmo arquivo de script algumas linhas acima deste trecho de código, a variável $ FILEPATH não recebe um valor e é indefinida, então o que realmente é executado é:

if [ -f ] ; then
cp $FILEPATH ~/some/other/dir
fi

Nesta situação, eu esperaria que este testeemita um erro (porque não há argumento para -f) ou para retornar falso (porque procura um arquivo sem nome), mas o teste retorna verdadeiro e o conteúdo da condição if é executado.

Estou me perguntando como o bash interpreta este teste para retornar verdadeiro neste cenário. Qual é o teste real feito?

Estou executando o bash versão 4.3.48 no Ubuntu

Respostas:

2 para resposta № 1

Isso é o Comportamento POSIX para o test comando:

O comando testcom

1 argumento:

Saia verdadeiro (0) se $ 1 não for nulo; caso contrário, saia de false.

Conseqüentemente test -f (ou equivalente, [ -f ]) é chamado com um argumento não nulo, então ele retorna true.