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 № 1Isso é o Comportamento POSIX para o test
comando:
O comando test
com
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
.