./a.out && echo $?return = 0 の場合にのみ戻り値を印刷します。

./a.out && echo $?return = 0 の場合にのみ戻り値を印刷します。

エコ$?次のシナリオでは、戻り値1は表示されません。

echo "int main() { return 1; }" > foo.c
gcc foo.c && ./a.out && echo $?

しかし、エコ$?プログラムがゼロを返す場合にのみ機能します。なぜこれですか?

注:他の作業を行う場合エコ$?上記のコードの後、希望の出力1を取得できます。

ベストアンサー1

演算子&&はブール値です。そして段落評価機能付き。つまり、最初のコマンドが成功した場合0にのみ2番目のコマンドを実行します(つまり、return)。一般的な使用法は次のとおりです。

tar xf file.tar && rm file.tar

抽出が成功した場合にのみファイルが削除されます。

あなたのスクリプトには良い例も含まれています。

gcc foo.c && ./a.out

gccプログラムは、成功した場合にのみ実行を試みます。

$?成功したかどうかに関係なく表示するには、a.out次のように書くことができます。

gcc foo.c && { ./a.out ; echo $? ; }

{...}コンパイルが成功したらすべて実行するようにするこれらのグループコマンド。

おすすめ記事