Skip to main content

Semua Tentang Perintah Linux / Unix: expr

fsck@Linux (Mungkin 2025)

fsck@Linux (Mungkin 2025)
Anonim

Nama

expr - Menilai ungkapan

Sinopsis

expr arg ? arg arg … ?

Concatenates arg (menambah ruang pemisah di antara mereka), menilai hasilnya sebagai ungkapan Tcl, dan mengembalikan nilai. Pengendali yang dibenarkan dalam ekspresi Tcl adalah subset dari pengendali yang dibenarkan dalam ekspresi C, dan mereka mempunyai makna yang sama dan keutamaan sebagai operator C yang sama. Ungkapan hampir selalu menghasilkan hasil numerik (nilai integer atau floating-point). Sebagai contoh, ungkapan itu

expr 8.2 + 6

menilai hingga 14.2. Ekspresi Tcl berbeza dari ekspresi C dengan cara yang dikenal pasti. Juga, ungkapan Tcl menyokong pengendali bukan angka dan perbandingan rentetan.

Beroperasi

Ungkapan Tcl terdiri daripada kombinasi pengendali, operator, dan kurungan. Ruang putih boleh digunakan di antara pengendali dan pengendali dan kurungan; ia tidak diendahkan oleh arahan ungkapan itu. Jika mungkin, operan ditafsirkan sebagai nilai integer. Nilai integer boleh ditentukan dalam perpuluhan (kes biasa), dalam oktaf (jika aksara pertama operan adalah0), atau dalam heksadesimal (jika dua aksara pertama operan adalah0x). Jika pengendali tidak mempunyai salah satu format integer yang diberikan di atas, maka ia dianggap sebagai nombor terapung jika itu mungkin. Nombor terapung boleh dinyatakan dalam mana-mana cara yang diterima oleh kompilator C yang kompatibel ANSI (kecuali bahawaf, F, l, danL akhiran tidak akan dibenarkan dalam kebanyakan pemasangan). Sebagai contoh, semua yang berikut adalah nombor terapung yang sah: 2.1, 3., 6e4, 7.91e + 16. Sekiranya tiada tafsiran angka boleh dilakukan, maka pengendali dibiarkan sebagai rentetan (dan hanya satu set operator yang terhad boleh digunakan untuknya).

Operasi boleh dinyatakan dalam mana-mana cara berikut:

1

Sebagai nilai berangka, sama ada integer atau floating-point.

2

Sebagai pembolehubah Tcl, menggunakan standard$ notasi. Nilai pembolehubah akan digunakan sebagai pengendali.

3

Sebagai rentetan yang disertakan dalam petikan berganda. Pengekspresikan ungkapan akan melakukan backslash, pembolehubah, dan penggantian perintah pada maklumat antara petikan, dan menggunakan nilai yang dihasilkan sebagai pengendali

4

Sebagai rentetan tertutup dalam penyokong gigi. Watak-watak antara pendakap terbuka dan penyokong pendekat akan digunakan sebagai pengendali tanpa apa-apa penggantian.

5

Sebagai perintah Tcl tertutup dalam kurungan. Perintah itu akan dilaksanakan dan hasilnya akan digunakan sebagai operan.

6

Sebagai fungsi matematik yang argumennya mempunyai sebarang bentuk di atas untuk operan, sepertidosa ($ x). Lihat di bawah untuk senarai fungsi yang ditentukan.

Di mana penggantian terjadi di atas (contohnya dalam rentetan yang disebutkan), ia dilakukan oleh arahan ungkapan. Walau bagaimanapun, lapisan penggantian tambahan mungkin telah dilakukan oleh parser arahan sebelum pemproses ungkapan disebut. Seperti yang dibincangkan di bawah, biasanya lebih baik untuk melampirkan ungkapan dalam pendakap untuk menghalang parser arahan daripada melaksanakan penggantian pada kandungan.

Untuk beberapa contoh ungkapan mudah, katakan pembolehubah itua mempunyai nilai 3 dan pembolehubahbmempunyai nilai 6. Kemudian perintah di sebelah kiri setiap baris di bawah akan menghasilkan nilai di sebelah kanan baris:

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

Pengendali

Pengendali yang sah disenaraikan di bawah, dikumpulkan dalam susunan yang lebih rendah dari keutamaan:

- + ~ !

Unary minus, unary plus, bit-wise NOT, logical NOT. Tiada satu daripada pengendali ini boleh digunakan untuk pengendali rentetan, dan TIDAK bijak sedikit boleh digunakan hanya untuk bilangan bulat.

* / %

Maju, kongsi, sisa. Tiada satu daripada operator ini boleh digunakan untuk pengendali rentetan, dan sisanya boleh digunakan hanya untuk bilangan bulat. Selebihnya akan sentiasa mempunyai tanda yang sama dengan pembagi dan nilai mutlak yang lebih kecil daripada pembagi.

+ -

Tambah dan tolak. Sah untuk mana-mana pengendali berangka.

<< >>

Pergeseran kiri dan kanan. Sah untuk integer beroperasi sahaja. Peralihan yang betul sentiasa menyebarkan sedikit tanda.

< > <= >=

Boolean kurang, lebih besar, kurang daripada atau sama, dan lebih besar daripada atau sama. Setiap operator menghasilkan 1 jika keadaan itu benar, sebaliknya. Pengendali ini boleh digunakan untuk rentetan dan juga pengendali berangka, di mana perbandingan rentetan digunakan.

== !=

Boolean sama dan tidak sama. Setiap operator menghasilkan hasil sifar / satu. Sah untuk semua jenis operan.

&

Bijak-bijak DAN. Sah untuk integer beroperasi sahaja.

^

Sempurna bijak ATAU. Sah untuk integer beroperasi sahaja.

|

Bijak-bijak ATAU. Sah untuk integer beroperasi sahaja.

&&

Logik DAN. Menghasilkan 1 hasil jika kedua-dua pengendali tidak sifar, 0 sebaliknya. Sah untuk boolean dan angka (integer atau terapung-titik) hanya beroperasi.

||

Logik ATAU. Menghasilkan hasil 0 jika kedua-dua pengendali adalah sifar, 1 sebaliknya. Sah untuk boolean dan angka (integer atau terapung-titik) hanya beroperasi.

x ? y : z

Jika-kemudian-lain, seperti dalam C. Jika x menilai untuk tidak sifar, maka hasilnya adalah nilai y . Jika tidak, hasilnya ialah nilai z . The x pengendali mesti mempunyai nilai angka.

Lihat manual C untuk maklumat lanjut mengenai hasil yang dihasilkan oleh setiap pengendali. Semua kumpulan operator binari kiri ke kanan dalam tahap pendahuluan yang sama. Sebagai contoh, arahan itu

expr 4 * 2 <7

pulangan 0.

The&&, ||, dan?: pengendali mempunyai `` penilaian malas '', sama seperti dalam C, yang bermaksud bahawa pengendali tidak dinilai jika mereka tidak diperlukan untuk menentukan hasilnya. Sebagai contoh, dalam perintah itu

expr {$ v? a: b}

hanya satu daripadaa ataub sebenarnya akan dinilai, bergantung pada nilai$ v. Perhatikan, bagaimanapun, bahawa ini hanya benar jika keseluruhan ungkapan disertakan dalam pendakap; jika tidak, pcler Tcl akan menilai kedua-duanyaa danb sebelum memohonexpr perintah.

Fungsi Matematik

Tcl menyokong fungsi matematik berikut dalam ungkapan:

abs coshlogsqrt acos doublelog10srand seperti dalam exppowTan atan lantairandtanh atan2 fmodpusingan ceil hipotekdosa cos intsinh

abs ( arg )

Mengembalikan nilai mutlak arg . Arg boleh sama ada integer atau terapung-titik, dan hasilnya dikembalikan dalam bentuk yang sama.

acos ( arg )

Mengembalikan kosina arka arg , dalam lingkungan 0, pi radian. Arg sepatutnya dalam julat -1,1.

seperti dalam( arg )

Mengembalikan sinus arka daripada arg , dalam lingkungan -pi / 2, pi / 2 radian. Arg sepatutnya dalam julat -1,1.

atan ( arg )

Mengembalikan tangen arc of arg , dalam lingkungan -pi / 2, pi / 2 radian.

atan2 ( x, y )

Mengembalikan tangen arc of y / x , dalam rentang -pi, pi radian. x dan y tidak boleh keduanya menjadi 0.

ceil ( arg )

Mengembalikan nilai integer terkecil tidak kurang daripada arg .

cos ( arg )

Mengembalikan kosinus arg diukur dalam radian.

cosh ( arg )

Mengembalikan kosinus hiperbolik arg . Sekiranya keputusan itu menyebabkan limpahan, ralat akan dikembalikan.

double ( arg )

Jika arg adalah nilai terapung, pulangan arg , jika tidak, menukar arg untuk mengapungkan dan mengembalikan nilai yang ditukar.

exp ( arg )

Mengembalikan eksponen arg , ditakrifkan sebagai e ** arg . Sekiranya keputusan itu menyebabkan limpahan, ralat akan dikembalikan.

lantai ( arg )

Mengembalikan nilai integral yang terbesar tidak lebih besar daripada arg .

fmod ( x, y )

Mengembalikan baki titik terapung pembahagian x oleh y . Jika y adalah 0, ralat dikembalikan.

hipot ( x, y )

Mengira panjang hipotenus segi tiga tepat ( x * x + y * y ).

int ( arg )

Jika arg adalah nilai integer, pulangan arg , jika tidak, menukar arg untuk integer dengan pemangkasan dan mengembalikan nilai yang ditukar.

log ( arg )

Mengembalikan logaritma semulajadi arg . Arg mestilah nilai positif.

log10 ( arg )

Mengembalikan asas 10 logaritma arg . Arg mestilah nilai positif.

pow ( x, y )

Mengira nilai x dibangkitkan kepada kuasa y . Jika x adalah negatif, y mesti nilai integer.

rand ()

Mengembalikan nombor titik terapung dari sifar kepada hanya kurang daripada satu atau, dalam segi matematik, julat 0,1. Benih ini berasal dari jam dalaman mesin atau mungkin ditetapkan secara manual dengan fungsi srand.

pusingan ( arg )

Jika arg adalah nilai integer, pulangan arg , jika tidak, menukar arg untuk integer dengan pembulatan dan mengembalikan nilai yang ditukar.

dosa ( arg )

Mengembalikan semula sinus arg diukur dalam radian.

sinh ( arg )

Mengembalikan sinus hiperbolik arg . Sekiranya keputusan itu menyebabkan limpahan, ralat akan dikembalikan.

sqrt ( arg )

Mengembalikan akar kuasa dua arg . Arg mestilah tidak negatif.

srand ( arg )

The arg , yang mesti menjadi integer, digunakan untuk menetapkan semula benih untuk penjana nombor rawak. Mengembalikan nombor rawak pertama dari benih itu. Setiap jurubahasa mempunyai benih sendiri.

Tan( arg )

Mengembalikan tangen arg diukur dalam radian.

tanh ( arg )

Mengembalikan tangen hiperbola arg .

Sebagai tambahan kepada fungsi-fungsi yang telah ditetapkan, aplikasi mungkin menentukan fungsi-fungsi tambahan menggunakanTcl_CreateMathFunc().

Jenis, Limpahan, dan Ketepatan

Semua perhitungan dalaman yang melibatkan bilangan bulat dilakukan dengan jenis C lama , dan semua perhitungan dalaman yang melibatkan titik terapung dilakukan dengan jenis C double . Apabila menukar rentetan kepada titik terapung, limpasan eksponen dikesan dan menyebabkan ralat Tcl. Untuk penukaran kepada integer dari rentetan, pengesanan limpahan bergantung kepada tingkah laku beberapa rutin di perpustakaan C tempatan, jadi ia harus dianggap sebagai tidak boleh dipercayai. Walau bagaimanapun, limpahan integer dan aliran bawah biasanya tidak dapat dikesan dengan pasti untuk keputusan pertengahan. Limpahan dan aliran bawah floating-point dikesan ke tahap yang disokong oleh perkakasan, yang umumnya cukup boleh dipercayai.

Penukaran antara representasi dalaman untuk bilangan integer, floating-point, dan string berfungsi secara automatik seperti yang diperlukan. Untuk pengiraan aritmetik, bilangan bulat digunakan sehingga beberapa nombor terapung diperkenalkan, selepas itu titik terapung digunakan. Sebagai contoh,

expr 5/4

pulangan 1, sementara

expr 5 / 4.0 expr 5 / (panjang tali "abcd" + 0.0)

keduanya kembali 1.25. Nilai terapung selalu dipulangkan dengan ``.'' atau ae supaya mereka tidak akan kelihatan seperti nilai integer. Sebagai contoh,

expr 20.0 / 5.0

pulangan4.0, tidak4.

Operasi Rentetan

Nilai-nilai rentetan boleh digunakan sebagai pengendali pengendali perbandingan, walaupun evaluator ungkapan cuba melakukan perbandingan sebagai integer atau floating-point apabila dapat. Jika salah satu pengendali perbandingan adalah rentetan dan yang lain mempunyai nilai berangka, operan berangka ditukar kembali ke rentetan menggunakan C sprintf penentu format% d untuk bilangan bulat dan% g untuk nilai mata terapung. Contohnya, arahan

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

kedua-dua pulangan 1. Perbandingan pertama dilakukan dengan menggunakan perbandingan integer, dan yang kedua dilakukan dengan menggunakan perbandingan rentetan setelah operan kedua ditukarkan ke rentetan18. Kerana kecenderungan Tcl untuk merawat nilai-nilai sebagai nombor-nombor apabila mungkin, ia biasanya bukan idea yang baik untuk menggunakan pengendali seperti==apabila anda benar-benar mahukan perbandingan rentetan dan nilai-nilai operan boleh sewenang-wenangnya; ia lebih baik dalam kes-kes ini untuk menggunakannyatali arahan sebaliknya.

Pertimbangan Prestasi

Nyatakan ungkapan dalam kawat untuk kelajuan terbaik dan keperluan storan terkecil. Ini membolehkan compiler bytecode Tcl untuk menghasilkan kod terbaik.

Seperti yang dinyatakan di atas, ungkapan digantikan dua kali: sekali oleh pcl Tcl dan sekali oleh expr perintah. Contohnya, arahan

tetapkan 3 tetapkan b {$ a + 2} expr $ b * 4

kembali 11, bukannya berganda 4. Ini kerana pcler Tcl akan menggantikannya terlebih dahulu$ a + 2 untuk pembolehubahb, makaexpr arahan akan menilai ungkapan$ a + 2 * 4.

Kebanyakan ungkapan tidak memerlukan penggantian pusingan kedua. Sama ada mereka tertutup dalam pendakap atau, jika tidak, penggantian pembolehubah dan arahan mereka menghasilkan nombor atau rentetan yang tidak memerlukan penggantian. Walau bagaimanapun, kerana beberapa ungkapan tanpa syarat memerlukan dua pusingan penggantian, pengkomputeran bytecode mesti mengeluarkan arahan tambahan untuk menangani keadaan ini. Kod yang paling mahal diperlukan untuk ekspresi tanpa kata yang mengandungi penggantian perintah. Ungkapan ini mesti dilaksanakan dengan menghasilkan kod baru setiap kali ekspresi dijalankan.

Kata kunci

aritmetik, boolean, perbandingan, ungkapan, perbandingan kabur

Penting: Menggunakan lelaki perintah ( % lelaki ) untuk melihat bagaimana arahan digunakan pada komputer tertentu anda.