Unix'teki test komutu çıktı yazdırmıyor


20

Bunu terminale yazdığımda

test 4 -lt 6

Herhangi bir çıktı almıyorum. Neden olmasın? O ya da 1'e ihtiyacım var


1
'Test'in hemen bir değer çıktısı alma seçeneği olsaydı hoş olmaz mıydı? Sadece seçenek. Tüm ihtiyacımız olan bu.
— Todd Walton

Yanıtlar:


15

0 veya 1 alırsınız. Çıkış kodunda.

bash-4.2$ test 4 -lt 6

bash-4.2$ echo $?
0

bash-4.2$ test 4 -gt 6

bash-4.2$ echo $?
1

Güncelleme : Çıkış kodunu daha sonra kullanmak üzere saklamak için bir değişkene atamanız yeterlidir:

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
çıkış kodunu oluşturmanın bir yolu var mı?
— indieman

3
Hayır. Yalnızca çıktı yeniden yönlendirilebilir. Her neyse, genellikle buna gerek yok. Daha sonra kullanmak üzere saklamak için bir değişkene atamanız yeterlidir. Veya bu değerle niyetinizin tam olarak ne olduğunu bize bildirin.
— manatwork

2
Çıkış kodu, $?en azından yürüttüğünüz bir sonraki komutla üzerine yazılana kadar değişkene yerleştirilir .
— Shadur

1
Not: Sen kullanabilirsiniz dizi bir boru hattı birden komutların sonuç almak için. tarafından sonucu olacaktır son eğer boru hattı komuta seçeneği kapalı (varsayılan) 'dir. $PIPESTATUS$?pipefail
— l0b0

@indieman, çıkış durumuna göre başka bir şey yapmaksa, onu kaydetmenize bile gerek yoktur; sadece kullanınif test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
— Wildcard

5

Başka bir yol

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

Ancak bu durumda dikkatli olun. Eğer testdöner başarı ve echo 1başarısız echo 0yürütülecektir.


2

Bir çıkış kodu yerine standart çıkışta bir karşılaştırmanın sonucunu istiyorsanız, şu expr(1)komutu kullanabilirsiniz :

$ expr 4 '<=' 6
1

Dikkat edilmesi gereken iki şey:

  1. büyük olasılıkla operatörün birçoğunu kabuk metakarakterleriyle çeliştiği için alıntı yapmanız gerekecektir.
  2. çıkış değeri, dönüş kodunun tersidir test. testtrue için 0 döndürür (çıkış kodları için standarttır), ancak exprtrue için 1 yazdırır.

1
3. vardır testönemli ölçüde daha hızlı (yaklaşık 50 benim makinede kez), mahfaza yerleşik, testve exprgelen yürütülebilir coreutils paketi.
— manatwork

İkinci nokta için +1. Bu kadar karışıklık bulmak için çok sinir bozucu bir hata alabilir.
— Emanuel Berg

2

Aşağıdaki komutu yazabilirsiniz:

echo $(test -e myFile.txt) $?
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.