これを行うためのより適切な方法はありますか (ボーンシェル)?
IsThereAnyApplesLeft
applesLeft=$?
通常、c または Java では次のようにします。
applesLeft=IsThereAnyApplesLeft
これを行うためのより適切な方法はありますか (ボーンシェル)?
IsThereAnyApplesLeft
applesLeft=$?
通常、c または Java では次のようにします。
applesLeft=IsThereAnyApplesLeft
終了ステータスは通常、次のように暗黙的に使用されます。
if IsThereAnyApplesLeft;then
echo "Apples left"
fi
試す:
applesLeft=$(IsThereAnyApplesLeft > /dev/null)$?
はい、$?
それを回避する方法はありません。
2 つのコードは直接比較できません。あなたのbashの例は、「IsThereAnyApplesLeft」という実行可能ファイルを実行するサブプロセスを作成し、そのサブプロセスが終了するのを待って、サブプロセスの終了コードを変数 $? に保存しています。あなたがそれを調べてそれに応じて行動できるように。
これは実際には非常に複雑な相互作用であり、C で同じことを行うには、かなりの量のコードが必要になります。サブプロセスを fork() し、子の pid に親の wait4pid() を持たせ、同時に子でファイル「IsThereAnyApplesLeft」で execl() を呼び出して実行する必要があります。シェル スクリプト言語を使用する利点の 1 つは、この種のものをユーザーから隠すことです。
比較すると、C コード スニペットは単に C 関数を呼び出し、その結果をローカル変数に格納しているだけです。これは、bash では次のようになります。
IsThereAnyApplesLeft()
{
echo 498
}
applesLeft=`IsThereAnyApplesLeft`
echo "there are $applesLeft apples left."
優雅ではないことは何$?
ですか?
Advanced Bash Scripting Guideによると、終了コードを取得する方法は他$?
にありません$?
。別の方法があれば、上記のリンクの終了コードセクションに確実にリストされていたはずです。