Unixのテストコマンドは出力を印刷しません。

Unixのテストコマンドは出力を印刷しません。

端末にこれを入力すると

test 4 -lt 6

私は何の結果も得られません。なぜできないの? 0または1が必要です。

答え1

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

答え2

別の方法は

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

しかし、この場合は注意してください。test成功が返されると、実行は失敗しますecho 1echo 0

答え3

終了コードの代わりに標準出力で比較結果を表示するには、次のexpr(1)コマンドを使用できます。

$ expr 4 '<=' 6
1

2つの点に注意してください。

  1. 多くの部分がシェルメタ文字と衝突するため、引用演算子が必要になる場合があります。
  2. 出力値は戻りコードとは反対ですtesttest0を返す場合はtrue(終了コードの標準)を意味しますが、expr1を印刷するとtrueを意味します。

答え4

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

echo $(test -e myFile.txt) $?

関連情報