Perintah tes di unix tidak mencetak output

20

Ketika saya mengetik ini di terminal

test 4 -lt 6

Saya tidak mendapatkan hasil. Kenapa tidak? Saya membutuhkan 0 atau 1

indieman
sumber
1
Bukankah lebih baik jika 'tes' memiliki opsi untuk menampilkan nilai segera? Hanya pilihannya. Itu yang kita butuhkan.
Todd Walton

Jawaban:

15

Anda mendapatkan 0 atau 1. Di kode akses.

bash-4.2$ test 4 -lt 6

bash-4.2$ echo $?
0

bash-4.2$ test 4 -gt 6

bash-4.2$ echo $?
1

Pembaruan : Untuk menyimpan kode akses untuk digunakan nanti, tetapkan saja ke variabel:

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
manatwork
sumber
1
apakah ada cara untuk mem-pipkan kode keluar?
indieman
3
Tidak. Hanya output yang bisa diarahkan. Bagaimanapun, biasanya tidak perlu untuk itu. Untuk menyimpannya untuk digunakan nanti, cukup tetapkan ke variabel. Atau beri tahu kami apa sebenarnya niat Anda dengan nilai itu.
manatwork
2
Kode keluar ditempatkan ke dalam $?variabel - setidaknya sampai ditimpa oleh perintah berikutnya yang Anda jalankan.
Shadur
1
PS: Anda dapat menggunakan yang $PIPESTATUSarray yang untuk mendapatkan hasil beberapa perintah dalam pipa. $?akan dengan menjadi hasil dari terakhir perintah dalam pipa jika yang pipefailpilihan adalah off (default).
l0b0
@indieman, jika yang Anda butuhkan adalah melakukan sesuatu yang lain berdasarkan status keluar, Anda bahkan tidak perlu menyimpannya — cukup gunakanif test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
Wildcard
5

Cara lain adalah

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

Tapi hati-hati dalam hal itu. Jika testpengembalian berhasil dan echo 1gagal echo 0akan dieksekusi.

buru-buru
sumber
2

Jika Anda ingin hasil perbandingan standar keluar dan bukan kode keluar, Anda dapat menggunakan expr(1)perintah:

$ expr 4 '<=' 6
1

Dua hal yang perlu diperhatikan:

  1. Anda mungkin akan perlu mengutip operator karena banyak dari mereka bertentangan dengan shell metacharacters
  2. nilai output adalah kebalikan dari kode pengembalian untuk test. testmengembalikan 0 untuk true (yang merupakan standar untuk kode keluar), tetapi exprmencetak 1 untuk true.
camh
sumber
1
3. Ada testbuiltin shell, yang jauh lebih cepat (sekitar 50 kali pada mesin saya) daripada testdan exprexecutable dari paket coreutils .
manatwork
+1 untuk poin kedua. Bisa mendapatkan bug yang sangat menyebalkan untuk ditemukan jika Anda mengacaukannya.
Emanuel Berg
2

Anda dapat mengetikkan perintah berikut:

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