Dimulai dengan argumen bash: -lt dan -gt

24

Saya mulai dengan bash dan saya menemukan yang berikut:

if test $first -lt $second
then
  echo $first is lower than $second
else
  if test $first -gt $second
  then
    echo $first is higher than $second
  else
    echo $first and $second are equals
  fi
fi

Untuk membaca skrip dan menjalankannya, saya tahu apa fungsinya, tetapi bukan untuk apa -lt dan -gt.

Dapatkah seseorang memberi tahu saya apa nama 'alat' semacam itu dan apa yang mereka (-lt dan -gt) lakukan? Terima kasih!

pengguna47579
sumber
9
Maaf, tapi saya merasa perlu menunjukkan bahwa echopernyataan dalam kode menjawab pertanyaan Anda.
devnull
Ada tanda kutip yang hilang di sekitar variabel
Stéphane Chazelas

Jawaban:

29

Ini kependekan dari less thandan greater than. Ini digunakan untuk perbandingan integer di bash. Anda dapat membaca lebih lanjut dengan mengetik man test:

   ....
   INTEGER1 -gt INTEGER2
          INTEGER1 is greater than INTEGER2
   ....
   INTEGER1 -lt INTEGER2
          INTEGER1 is less than INTEGER2
   ....
cuonglm
sumber
7

Anda dapat menemukan definisi -ltdan -gtdalam dokumentasi testperintah ( man test), atau dalam dokumentasi bash karena testmerupakan perintah bawaan di bash (seperti di sebagian besar shell lainnya).

-ltdan -gtmerupakan perbandingan numerik (kurang dari [dan tidak sama], lebih besar dari [dan tidak sama]). Ada juga operator yang kurang / lebih besar atau sama -ledan -ge, dan operator yang sama dan tidak sama -eqdan -ne. Ini adalah operator numerik, sehingga akan ada kesalahan jika kedua belah pihak bukan angka, dan 9dianggap kurang dari 10.

Alasan mengapa nama seperti -ltdigunakan daripada biasanya <adalah karena karakter <tersebut akan ditafsirkan sebagai pengalihan. Operator =dan !=juga ada, tetapi mereka melakukan perbandingan string: test 00 -eq 0benar sedangkan test 00 = 0salah.

Beberapa shell, termasuk bash, juga memiliki operator <dan >yang melakukan perbandingan leksikografis string, jadi test 9 \< 10salah karena 9diurutkan sebelumnya 1(backslash mencegah karakter <ditafsirkan sebagai operator redirection). Kerang ini juga menawarkan sintaks braket ganda untuk pengujian, misalnya [[ 9 < 10 ]](yang bertentangan dengan [ 9 \< 10 ]), yang tidak dapat memiliki pengalihan di dalam sehingga <tidak perlu dikutip.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
4

Mereka hanya operator.

Cukup: gtdan ltrata - rata> (lebih besar dari) dan <(kurang dari).

Anda dapat melihat di sini untuk informasi lebih lanjut tentang operator:

Tanda tanya
sumber