Por que essa comparação não é igual?

0

Parece que isso não foi avaliado como verdadeiro

is_equal () {
  in="$1"
  if [[ "$in" == "385" ]]; then
    return 0
  else
    return 1
  fi
}
a= is_equal 385
if [[ "$a" ]]; then
  echo "equal"
else
  echo "NOT equal"
fi

$ ./equal_nums.sh 
NOT equal
$
    
por Michael Durrant 23.01.2015 / 20:16

1 resposta

5

Sua função tem um status de saída, mas nenhuma saída. Sua variável $a estará sempre vazia, então o teste [[ $a ]] será sempre "falso"

Você realmente quer isso:

if is_equal 42; then ...

Mas o que você acha que quer é isso

is_equal 42                # don't capture the output
a=$?                       # but do grab the exit status
if [[ $a -eq 0 ]]; then ...
    
por 23.01.2015 / 21:10