2

これを行うためのより適切な方法はありますか (ボーンシェル)?

IsThereAnyApplesLeft
applesLeft=$?

通常、c または Java では次のようにします。

applesLeft=IsThereAnyApplesLeft
4

4 に答える 4

6

終了ステータスは通常、次のように暗黙的に使用されます。

if IsThereAnyApplesLeft;then
   echo "Apples left"
fi
于 2010-04-16T16:40:50.670 に答える
3

試す:

applesLeft=$(IsThereAnyApplesLeft > /dev/null)$?

はい、$?それを回避する方法はありません。

于 2010-04-16T16:35:46.577 に答える
0

2 つのコードは直接比較できません。あなたのbashの例は、「IsThereAnyApplesLeft」という実行可能ファイルを実行するサブプロセスを作成し、そのサブプロセスが終了するのを待って、サブプロセスの終了コードを変数 $? に保存しています。あなたがそれを調べてそれに応じて行動できるように。

これは実際には非常に複雑な相互作用であり、C で同じことを行うには、かなりの量のコードが必要になります。サブプロセスを fork() し、子の pid に親の wait4pid() を持たせ、同時に子でファイル「IsThereAnyApplesLeft」で execl() を呼び出して実行する必要があります。シェル スクリプト言語を使用する利点の 1 つは、この種のものをユーザーから隠すことです。

比較すると、C コード スニペットは単に C 関数を呼び出し、その結果をローカル変数に格納しているだけです。これは、bash では次のようになります。

IsThereAnyApplesLeft()
{
        echo 498
}

applesLeft=`IsThereAnyApplesLeft`
echo "there are $applesLeft apples left."
于 2010-04-16T17:06:01.493 に答える
-1

優雅ではないことは何$?ですか?

Advanced Bash Scripting Guideによると、終了コードを取得する方法は他$?にありません$?。別の方法があれば、上記のリンクの終了コードセクションに確実にリストされていたはずです。

于 2010-04-16T16:36:15.157 に答える