UNIXのテストコマンドが出力を出力しない


20

ターミナルでこれを入力すると

test 4 -lt 6

何も出力されません。何故なの?0または1が必要です


1
「テスト」に値をすぐに出力するオプションがあったらいいと思いませんか?ただオプション。必要なのはそれだけです。
トッドウォルトン

回答:


15

終了コードで0または1を取得します。

bash-4.2$ test 4 -lt 6

bash-4.2$ echo $?
0

bash-4.2$ test 4 -gt 6

bash-4.2$ echo $?
1

更新:後で使用するために終了コードを保存するには、変数に割り当てます。

bash-4.2$ test 4 -lt 6

bash-4.2$ first=$?

bash-4.2$ test 4 -gt 6

bash-4.2$ second=$?

bash-4.2$ echo "first test gave $first and the second $second"
first test gave 0 and the second 1

1
終了コードをパイプする方法はありますか?
インディマン

3
いいえ。出力のみをリダイレクトできます。とにかく、通常はその必要はありません。後で使用するために保存するには、変数に割り当てます。または、その値についてのあなたの意図を正確に教えてください。
マナトワーク

2
$?少なくとも、次に実行するコマンドによって上書きされるまで、終了コードは変数に配置されます。
シャドゥール

1
PS:あなたが使用することができ、アレイをパイプラインで複数のコマンドの結果を取得します。オプションがオフ(デフォルト)の場合パイプラインの最後のコマンドの結果になります。$PIPESTATUS$?pipefail
l0b0

、何が必要なの終了ステータスに基づいて何かをやるのであれば、あなたもそれを、ただ保存するために使用する必要はありません@indiemanif test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
ワイルドカード

5

別の方法は

test 4 -lt 6 && echo 1 || echo 0

ただし、その場合は注意してください。もしtestリターンの成功とecho 1失敗がecho 0実行されます。


2

終了コードではなく標準出力の比較結果が必要な場合は、expr(1)次のコマンドを使用できます。

$ expr 4 '<=' 6
1

注意すべき2つのこと:

  1. 多くの場合、シェルのメタキャラクターと競合するため、演算子を引用する必要があります。
  2. 出力値はの戻りコードの反対ですtesttesttrue(終了コードの標準)に対して0を返しますが、trueに対してexpr1を出力します。

1
3.ありtest、かなり速い(私のマシンで50倍程度)よりもシェル組み込み、testおよびexprからの実行ファイルのcoreutilsのパッケージが。
マナトワーク

2番目のポイントに対して+1。あなたがそれを台無しにした場合、見つけるのは非常にイライラするバグを取得することができます。
エマニュエルベルク

2

次のコマンドを入力できます。

echo $(test -e myFile.txt) $?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.