この比較結果が同じではないのはなぜですか?

この比較結果が同じではないのはなぜですか?

これを真と評価できないようです

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
$

答え1

関数に終了状態がありますが、出力はありません。変数は$a常に空であるため、[[ $a ]]テストは常に「false」です。

あなたはこれが欲しい:

if is_equal 42; then ...

しかし、あなたはあなたが欲しいものがこれだと思います

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

関連情報