エコ$?次のシナリオでは、戻り値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 $? ; }
{...}
コンパイルが成功したらすべて実行するようにするこれらのグループコマンド。