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 $?