web-dev-qa-db-ja.com

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

端末でこれを入力すると

test 4 -lt 6

出力がありません。何故なの? 0か1が必要です

21
indieman

終了コードで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

pdate:後で使用できるように終了コードを保存するには、単に終了コードを変数に割り当てます。

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
15
manatwork

別の方法は

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

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

6
rush

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

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

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

$ expr 4 '<=' 6
1

注意すべき2つの点:

  1. 多くの場合、シェルのメタ文字と競合するため、演算子を引用符で囲む必要があります。
  2. 出力値はtestの戻りコードの反対です。 testはtrue(終了コードの標準)の場合は0を返しますが、exprはtrueの場合は1を出力します。
2
camh