コマンドが間違っていますが、終了コードが0の理由は何ですか?

コマンドが間違っていますが、終了コードが0の理由は何ですか?

Bashスクリプトでさまざまなものをテストしていますが、説明できない問題に遭遇しました。

0以外の終了コードを取得するために意図的に間違ったコマンドを書きましたが、なぜかゼロが出ているようです.

私が実行するコードは次のとおりです。

USER_NAME=$(id -uns)

if [[ ${?} -ne 0 ]]
then
    echo "Your command failed to execute with exit code ${?}"
    exit 1
fi
echo "Your username is ${USER_NAME}"

私のコードの出力は次のとおりです

id:不明なオプション - s

詳細については、「id --help」を試してください。

終了コード 0 が原因でコマンドが失敗しました。

あなたのユーザー名は

どういうわけかechoコマンドの終了コードを表示していると思いますか?それでも終了コードは0ですが、なぜif文を入力するのですか?

それでは、表示する必要がある実際の終了コードを表示するにはどうすればよいですか?

答え1

コードの文から終了ifステータスを取得します。印刷テストの終了状態です[[ ${?} -ne 0 ]]。値は$?常に最後に実行されたコマンドの終了状態であり、少なくとも値が結果に$?設定されている限り、テストはコマンドと見なされます。

終了ステータスを印刷するには、id値が変更されない変数に割り当て、

id -uns
err=$?

if [[ $err -ne 0 ]]; then
    printf 'id failed with code %d\n' "$err" >&2
    exit 1
fi

関連情報