Skip to main content

Semua Tentang Linux / Unix Command: expr

fsck@Linux (Juni 2026)

fsck@Linux (Juni 2026)
Anonim

Nama

expr - Mengevaluasi ekspresi

Ringkasan

expr arg ? arg arg … ?

Gabungkan arg (menambahkan ruang pemisah di antara keduanya), mengevaluasi hasilnya sebagai ekspresi Tcl, dan mengembalikan nilainya. Operator diizinkan dalam ekspresi Tcl adalah bagian dari operator diizinkan dalam ekspresi C, dan mereka memiliki arti yang sama dan diutamakan sebagai operator C yang sesuai. Ekspresi hampir selalu menghasilkan hasil numerik (nilai integer atau floating-point). Misalnya, ekspresi

expr 8.2 + 6

mengevaluasi ke 14.2. Ekspresi Tcl berbeda dari ekspresi C dalam cara operan ditentukan. Juga, ekspresi Tcl mendukung operan non-numerik dan perbandingan string.

Operan

Ekspresi Tcl terdiri dari kombinasi operand, operator, dan tanda kurung. Ruang putih dapat digunakan antara operand dan operator dan tanda kurung; itu diabaikan oleh instruksi ungkapan itu. Jika memungkinkan, operan ditafsirkan sebagai nilai integer. Nilai integer dapat ditentukan dalam desimal (kasus normal), dalam oktal (jika karakter pertama operand adalah0), atau dalam heksadesimal (jika dua karakter pertama operand adalah0x). Jika operan tidak memiliki salah satu format bilangan bulat yang diberikan di atas, maka ia diperlakukan sebagai bilangan floating-point jika itu mungkin. Nomor floating-point dapat ditentukan dengan cara apa saja yang diterima oleh compiler C compiler ANSI (kecuali bahwaf, F, l, danL suffix tidak akan diizinkan di sebagian besar instalasi). Misalnya, semua yang berikut adalah angka floating-point yang valid: 2.1, 3., 6e4, 7.91e + 16. Jika tidak ada interpretasi numerik yang mungkin, maka operand dibiarkan sebagai string (dan hanya satu set operator terbatas yang dapat diterapkan).

Operan dapat ditentukan dengan salah satu cara berikut:

1

Sebagai nilai numerik, baik integer atau floating-point.

2

Sebagai variabel Tcl, menggunakan standar$ notasi. Nilai variabel akan digunakan sebagai operan.

3

Sebagai string tertutup dalam tanda kutip ganda. Pengurai ekspresi akan melakukan backslash, variabel, dan penggantian perintah pada informasi di antara tanda kutip, dan menggunakan nilai yang dihasilkan sebagai operand

4

Sebagai tali tertutup di kawat gigi. Karakter antara kurung buka dan penjepit dekat yang cocok akan digunakan sebagai operand tanpa substitusi apa pun.

5

Sebagai perintah Tcl tertutup dalam tanda kurung. Perintah akan dieksekusi dan hasilnya akan digunakan sebagai operan.

6

Sebagai fungsi matematika yang argumennya memiliki salah satu dari bentuk di atas untuk operan, sepertisin ($ x). Lihat di bawah untuk daftar fungsi yang ditentukan.

Di mana substitusi terjadi di atas (misalnya di dalam string kutipan), mereka dilakukan oleh instruksi ekspresi. Namun, lapisan substitusi tambahan mungkin sudah dilakukan oleh parser perintah sebelum prosesor ekspresi dipanggil. Sebagaimana dibahas di bawah ini, biasanya paling baik untuk menyertakan ekspresi dalam tanda kurung untuk mencegah parser perintah melakukan substitusi pada konten.

Untuk beberapa contoh ekspresi sederhana, misalkan variabelSebuah memiliki nilai 3 dan variabelbmemiliki nilai 6. Maka perintah di sisi kiri masing-masing garis di bawah ini akan menghasilkan nilai di sisi kanan baris:

expr 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5.6 expr 4 * llength "6 2" 8 expr {{kata satu} <"kata $ a"} 0

Operator

Operator yang valid tercantum di bawah ini, dikelompokkan dalam urutan menurun prioritas:

- + ~ !

Unary minus, unary plus, bit-wise NOT, logical NOT. Tak satu pun dari operan ini dapat diterapkan ke operan string, dan bit-wise NOT mungkin hanya diterapkan ke bilangan bulat.

* / %

Gandakan, bagi, sisanya. Tak satu pun dari operan ini dapat diterapkan ke operan string, dan sisanya dapat diterapkan hanya untuk bilangan bulat. Sisanya akan selalu memiliki tanda yang sama dengan pembagi dan nilai absolut yang lebih kecil dari pembagi.

+ -

Tambah dan kurangi. Berlaku untuk setiap operan numerik.

<< >>

Pergeseran kiri dan kanan. Berlaku hanya untuk operan bilangan bulat. Pergeseran kanan selalu menyebarkan sedikit tanda.

< > <= >=

Boolean kurang, lebih besar, kurang dari atau sama, dan lebih besar dari atau sama. Setiap operator menghasilkan 1 jika kondisinya benar, 0 sebaliknya. Operator ini dapat diterapkan ke string serta operan numerik, di mana perbandingan string kasus digunakan.

== !=

Boolean sama dan tidak sama. Setiap operator menghasilkan hasil nol / satu. Berlaku untuk semua jenis operan.

&

Bit-wise AND. Berlaku hanya untuk operan bilangan bulat.

^

ATAU ORANG BAIK. Berlaku hanya untuk operan bilangan bulat.

|

Bijak ATAU. Berlaku hanya untuk operan bilangan bulat.

&&

Logis DAN. Menghasilkan hasil 1 jika kedua operan tidak nol, 0 sebaliknya. Berlaku hanya untuk operand boolean dan numerik (integer atau floating-point) saja.

||

Logika OR. Menghasilkan hasil 0 jika kedua operand adalah nol, 1 sebaliknya. Berlaku hanya untuk operand boolean dan numerik (integer atau floating-point) saja.

x ? y : z

Jika-maka-lain, seperti dalam C. Jika x mengevaluasi ke bukan nol, maka hasilnya adalah nilai y . Jika tidak, hasilnya adalah nilai z . Itu x operan harus memiliki nilai numerik.

Lihat manual C untuk rincian lebih lanjut tentang hasil yang dihasilkan oleh masing-masing operator. Semua grup operator biner kiri-ke-kanan dalam tingkat prioritas yang sama. Misalnya, perintah

expr 4 * 2 <7

mengembalikan 0.

Itu&&, ||, dan?: operator memiliki `` evaluasi malas '', sama seperti di C, yang berarti operan tidak dievaluasi jika mereka tidak diperlukan untuk menentukan hasilnya. Misalnya, dalam perintah

expr {$ v? a: b}

hanya satuSebuah ataub akan benar-benar dievaluasi, tergantung pada nilai$ v. Perhatikan, bagaimanapun, bahwa ini hanya benar jika seluruh ekspresi tertutup dalam tanda kurung; jika tidak, parser Tcl akan mengevaluasi keduanyaSebuah danb sebelum memohonexpr perintah.

Fungsi Matematika

Tcl mendukung fungsi matematika berikut dalam ekspresi:

abs tongkat pendeklogsqrt acos dua kali lipatlog10srand seperti dalam exppowberjemur atan lantairandtanh atan2 fmodbulat ceil hipotdosa cos intsinh

abs ( arg )

Mengembalikan nilai absolut dari arg . Arg dapat berupa integer atau floating-point, dan hasilnya dikembalikan dalam bentuk yang sama.

acos ( arg )

Mengembalikan kosinus busur dari arg , dalam rentang 0, pi radian. Arg harus dalam kisaran -1,1.

seperti dalam( arg )

Mengembalikan sinus busur dari arg , dalam rentang radian -pi / 2, pi / 2. Arg harus dalam kisaran -1,1.

atan ( arg )

Mengembalikan tangen busur dari arg , dalam rentang radian -pi / 2, pi / 2.

atan2 ( x, y )

Mengembalikan tangen busur dari y / x , dalam rentang -pi, pi radian. x dan y keduanya tidak bisa menjadi 0.

ceil ( arg )

Mengembalikan nilai integer terkecil tidak kurang dari arg .

cos ( arg )

Mengembalikan kosinus dari arg , diukur dalam radian.

tongkat pendek( arg )

Mengembalikan kosinus hiperbolik arg . Jika hasilnya akan menyebabkan overflow, kesalahan akan dikembalikan.

dua kali lipat( arg )

Jika arg adalah nilai mengambang, pengembalian arg , jika tidak bertobat arg untuk mengambang dan mengembalikan nilai yang dikonversi.

exp ( arg )

Mengembalikan eksponensial arg , didefinisikan sebagai e ** arg . Jika hasilnya akan menyebabkan overflow, kesalahan akan dikembalikan.

lantai( arg )

Mengembalikan nilai integral terbesar yang tidak lebih besar dari arg .

fmod ( x, y )

Mengembalikan sisa floating-point dari pembagian x oleh y . Jika y adalah 0, kesalahan dikembalikan.

hipot ( x, y )

Menghitung panjang sisi miring dari segitiga siku-siku ( x * x + y * y ).

int ( arg )

Jika arg adalah nilai integer, kembali arg , jika tidak bertobat arg ke integer dengan pemotongan dan mengembalikan nilai yang dikonversi.

log ( arg )

Mengembalikan logaritma natural dari arg . Arg harus menjadi nilai positif.

log10 ( arg )

Mengembalikan logaritma basis 10 dari arg . Arg harus menjadi nilai positif.

pow ( x, y )

Menghitung nilai x diangkat ke kekuatan y . Jika x negatif, y harus berupa nilai bilangan bulat.

rand ()

Mengembalikan angka floating point dari nol ke hanya kurang dari satu atau, dalam istilah matematika, kisaran 0,1). Benih berasal dari jam internal mesin atau dapat diatur secara manual dengan fungsi induk.

bulat( arg )

Jika arg adalah nilai integer, kembali arg , jika tidak bertobat arg ke integer dengan membulatkan dan mengembalikan nilai yang dikonversi.

dosa( arg )

Mengembalikan sinus dari arg , diukur dalam radian.

sinh ( arg )

Mengembalikan sinus hiperbolik arg . Jika hasilnya akan menyebabkan overflow, kesalahan akan dikembalikan.

sqrt ( arg )

Mengembalikan akar kuadrat dari arg . Arg harus tidak negatif.

srand ( arg )

Itu arg , yang harus berupa bilangan bulat, digunakan untuk mereset benih untuk pembuat nomor acak. Mengembalikan nomor acak pertama dari benih itu. Setiap penerjemah memiliki benihnya sendiri.

berjemur( arg )

Mengembalikan tangen arg , diukur dalam radian.

tanh ( arg )

Mengembalikan tangen hiperbolik arg .

Selain fungsi yang telah ditetapkan ini, aplikasi dapat menentukan fungsi tambahan menggunakanTcl_CreateMathFunc().

Jenis, Melimpah, dan Presisi

Semua perhitungan internal melibatkan bilangan bulat dilakukan dengan tipe C. panjang , dan semua perhitungan internal yang melibatkan floating-point dilakukan dengan tipe C. dua kali lipat . Ketika mengkonversi string ke floating-point, eksponen eksponen terdeteksi dan menghasilkan kesalahan Tcl. Untuk konversi ke integer dari string, deteksi overflow tergantung pada perilaku beberapa rutinitas di perpustakaan C lokal, sehingga harus dianggap tidak dapat diandalkan. Dalam kasus apapun, overflow integer dan underflow umumnya tidak terdeteksi secara andal untuk hasil antara. Floating-point overflow dan underflow terdeteksi pada tingkat yang didukung oleh perangkat keras, yang umumnya cukup dapat diandalkan.

Konversi antara representasi internal untuk integer, floating-point, dan operan string dilakukan secara otomatis sesuai kebutuhan. Untuk perhitungan aritmatika, bilangan bulat digunakan sampai beberapa nomor floating-point diperkenalkan, setelah itu floating-point digunakan. Sebagai contoh,

expr 5/4

mengembalikan 1, sementara

expr 5 / 4.0 expr 5 / (string length "abcd" + 0,0)

keduanya mengembalikan 1,25. Nilai floating-point selalu dikembalikan dengan ``.'' atau sebuahe sehingga mereka tidak akan terlihat seperti nilai integer. Sebagai contoh,

Expr 20.0 / 5.0

kembali4.0tidak4.

Operasi String

Nilai string dapat digunakan sebagai operand dari operator perbandingan, meskipun evaluator ekspresi mencoba melakukan perbandingan sebagai integer atau floating-point ketika itu bisa. Jika salah satu operan perbandingan adalah string dan yang lainnya memiliki nilai numerik, operan numerik diubah kembali ke string menggunakan C sprintf penentu format% d untuk bilangan bulat dan% g untuk nilai-nilai floating-point. Misalnya, perintah

expr {"0x03"> "2"} expr {"0y" <"0x12"}

keduanya kembali 1. Perbandingan pertama dilakukan dengan menggunakan perbandingan bilangan bulat, dan yang kedua dilakukan dengan menggunakan perbandingan string setelah operan kedua dikonversi ke string18. Karena kecenderungan Tcl untuk memperlakukan nilai sebagai angka jika memungkinkan, biasanya bukan ide yang baik untuk menggunakan operator seperti==ketika Anda benar-benar ingin perbandingan string dan nilai-nilai dari operand bisa sewenang-wenang; lebih baik dalam hal ini untuk menggunakantali perintah sebagai gantinya.

Pertimbangan Kinerja

Sertakan ekspresi dalam kawat gigi untuk kecepatan terbaik dan persyaratan penyimpanan terkecil. Ini memungkinkan compiler bytecode Tcl untuk menghasilkan kode terbaik.

Seperti yang disebutkan di atas, ekspresi diganti dua kali: satu kali oleh parser Tcl dan satu kali oleh expr perintah. Misalnya, perintah

atur 3 setel b {$ a + 2} expr $ b * 4

mengembalikan 11, bukan kelipatan 4. Ini karena parser Tcl pertama-tama akan menggantikan$ a + 2 untuk variabelb, laluexpr perintah akan mengevaluasi ekspresi$ a + 2 * 4.

Sebagian besar ekspresi tidak memerlukan penggantian babak kedua. Entah mereka tertutup dalam kurung atau, jika tidak, variabel dan pergantian perintah mereka menghasilkan angka atau string yang tidak sendiri membutuhkan pergantian. Namun, karena beberapa ekspresi yang tidak terkendali membutuhkan dua putaran substitusi, compiler bytecode harus mengeluarkan instruksi tambahan untuk menangani situasi ini. Kode paling mahal diperlukan untuk ekspresi yang tidak dikungkung yang mengandung substitusi perintah. Ekspresi ini harus diimplementasikan dengan menghasilkan kode baru setiap kali ekspresi dieksekusi.

Kata kunci

aritmatika, boolean, bandingkan, ekspresi, perbandingan fuzzy

Penting: Menggunakan pria perintah ( % pria ) untuk melihat bagaimana perintah digunakan pada komputer khusus Anda.