Bashのテスト式である[ 4 -gt 3 ]値をどのようにエコーしますか?

Bashのテスト式である[ 4 -gt 3 ]値をどのようにエコーしますか?

Bashのテスト式である[ 5 -gt 4 ]の値をどのようにエコーしますか?

[ 5 -gt 4 ] | echo

そして

echo `[ 5 -gt 4 ]`

どちらも最終的に空白行を印刷します

@Thomas Dickeyの答えはうまくいきますが、上記の2つがなぜ機能しないのかを説明できますか?

答え1

テストが実行されないため、コマンドは期待どおりに機能しません。出力標準出力ストリームに関するすべて。これは、パイプラインの次のコマンド(最初のコマンド)にパイプされた標準出力ストリームであり、代替コマンド置換(2番目のコマンド)の標準出力です。

しかし、最初のパイプの左側が標準出力ストリームから何かを生成しても、echo右側はそれを表示しません。ユーティリティはecho標準入力から読み取られません(例:cat読みます)。


すべてのシェルコマンドは終了ステータスを返します。たとえば、ステートメントはその終了状態に応じて機能しますif。終了状態は端末などに出力されません。そうしないと、コマンドやスクリプトの実際の出力が妨げられます。

使用するとき

[ 3 -gt 4 ]

[いくつかのパラメータを使用してこのユーティリティを呼び出すことができます。ユーティリティは終了ステータスを返します。まったく同じです

test 3 -gt 4

man testおよびman [(またはシェルhelp testから)を参照してください。bash

最後に実行されたコマンドの終了ステータスは特殊変数に保存されます$?

一般変数に保存したり、端末に出力したりできます。

[ 3 -gt 4 ]
printf 'Exit status of test was %s\n' "$?"
printf 'Exit status of printf was %s\n' "$?"

気づくprintf 返品自己終了状態を生成するため、呼び出しが正常な場合は、printfテスト$?状態を出力した後、値は0になります。

上記のコードは出力できます

Exit status of test was 1
Exit status of printf was 0

気づく自己テストここでは何も出力しないでください。終了ステータスのみを提供します。

答え2

ちょうどこれ:

[ 5 -gt 4 ]
echo $?

関連情報