Valor de retorno da função no UNIX

0

Eu não entendo a seguinte expressão.

function abc(){

..............

...............

[[ -f $filename]] && return 0 || return 1

}

Como no tutorial, se houver um arquivo com o nome da variável nome do arquivo, esta função retornará 1, caso contrário, retornará 0.

Eu entendo o operador && || , mas como essa declaração está obtendo o resultado do desejo?

Como para mim, No caso de [[ -f $filename ]] avaliar false, então uma declaração de && é falsa, em seguida, resultado de e é false.Agora ele vai para OR e se primeiro operando for 0, ele retorna o resultado do segundo operando para que deve retornar 1, mas em vez disso está retornando 0.

Como isso está sendo avaliado?

    
por rahul sharma 24.04.2018 / 20:59

1 resposta

1

As duas instruções return na última linha da função podem ser removidas.

[[ -f "$filename" ]]

Esta é a última instrução na função com os return removidos (observe a expansão da variável citada e o espaço adicionado antes de ]] ). O "valor de saída" da função será o resultado dessa declaração.

Se o arquivo $filename existir, a função sairá com um valor zero (significando "sucesso", "sim", "ok" etc.), caso contrário, sairá com um valor de um (ou mais geralmente , diferente de zero, significando "falha" de algum tipo).

Não misture || e && na mesma linha. Em uma linha de comando como

command1 && command2 || command3

o último comando seria executado se qualquer dos comandos anteriores falhasse (retornado diferente de zero).

É melhor escrever

if command1; then
    command2
else
    command3
fi

se é isso que você quis dizer.

Isso é importante em comandos como

[[ -f "$filename" ]] && echo "exists" || touch "$filename"

Isso tentaria executar o comando touch se o echo falhasse, o que pode acontecer se não houver nenhum lugar para a saída da string (ocorre um erro de gravação).

    
por 24.04.2018 / 21:08

Tags