Skip to main content

Minden a Linux / Unix parancsról: expr

expr command | Evaluate Expressions in Linux - FOTV (Június 2026)

expr command | Evaluate Expressions in Linux - FOTV (Június 2026)
Anonim

Név

expr - Értékelje a kifejezést

Szinopszis

expr arg ? arg arg … ?

összefűzi arg (szétválasztó terek között), az eredményt Tcl kifejezésként értékeli, és visszaadja az értéket. A Tcl kifejezésekben megengedett operátorok a C kifejezésekben engedélyezett operátorok részhalmaza, és ugyanolyan jelentéssel bírnak, mint a megfelelő C operátorok. Az kifejezések szinte mindig számszerű eredményeket hoznak (egész vagy lebegőpontos értékek). Például a kifejezés

8,2 + 6

értékeli a 14,2. A Tcl kifejezések különböznek a C-kifejezésektől az operandusok megadásával. A Tcl kifejezések továbbá nem numerikus operandusokat és string összehasonlításokat is támogatnak.

operandusok

A Tcl kifejezés operandusok, operátorok és zárójelek kombinációjából áll. Fehér teret lehet használni az operandusok és a kezelők és a zárójelek között; a kifejezés utasításai figyelmen kívül hagyják. Ahol lehetséges, az operandusokat egész számként értelmezik. Integer értékek megadhatók decimális (a normál esetben), oktális (ha az operandus első karaktere0) vagy hexadecimális (ha az operandus első két karaktere van0x). Ha egy operandusnak nincs a fentiekben megadott egész szám, akkor azt lebegőpontos számként kell kezelni, ha ez lehetséges. Lebegőpontos számokat bármely ANSI-kompatibilis C fordító által elfogadott módon megadhatunk (kivéve, hogy af, F, l, ésL az utótagok a legtöbb létesítményben nem engedélyezettek). Például az alábbiak mindegyike érvényes lebegőpontos számok: 2.1, 3., 6e4, 7.91e + 16. Ha nem lehetséges numerikus értelmezés, akkor egy operandus karakterlánc marad (és csak korlátozott számú operátor adható hozzá).

Az operandusokat az alábbi módokon lehet megadni:

1

Számértékként, egész szám vagy lebegőpont.

2

Mint Tcl változó, szabványos$ jelölés. A változó értékét operandusként használják.

3

Mint egy kettős idézőjelben zárt karaktersorozat. A kifejezésszerkesztő az idézőjelek közötti információt a visszalövés, a változó és a parancs helyettesítésével hajtja végre, és az eredményül kapott értéket operandusként használja

4

Mint egy zsinór zárva. A nyílt zárójel és az illeszkedő zárójelek közötti karaktereket az operandusként kell használni, mindenféle helyettesítés nélkül.

5

Tcl parancsként zárójelben. A parancs végrehajtásra kerül és az eredményt operandusként fogják használni.

6

Matematikai függvényként, amelynek érvei a fenti operandusformák bármelyikéhez, példáulsin ($ x). Lásd alább a meghatározott funkciók listáját.

Abban az esetben, ha a fenti helyettesítések (például belső idézőjelek) előfordulnak, azokat a kifejezés utasításai végzik. A parancselemző azonban már elvégezhet egy további helyettesítési réteget, mielőtt az expressziós processzort meghívnák. Az alábbiakban ismertetettek szerint általában a zárójelben lévő kifejezéseket csatolni kell ahhoz, hogy megakadályozzák a parancsszerkesztő számára a tartalom cseréjét.

Néhány példa az egyszerű kifejezésekre, tegyük fel a változótegy értéke 3 és a változóbA 6-os értéket az alábbi sorok bal oldalán a parancs adja meg a sor jobb oldalán lévő értéket:

expr 3,1 + $ a6,1 expr 2 + "$ a. $ b" 5,6 expr 4 * llength "6 2" 8 expr {{word one} <"szó $ a"} 0

Az üzemeltetők

Az érvényes operátorok az alábbiak szerint vannak felsorolva, csökkenő sorrendben csoportosítva:

- + ~ !

Unary mínusz, unary plus, bit-wise NEM, logikus NEM. Ezen operandusok egyike sem alkalmazható a string operandusokra, és bit-wise NOT csak az egész számokra alkalmazható.

* / %

Szorozzuk meg, oszd meg, maradjunk. Ezen operandusok egyike sem alkalmazható string operandusokra, a maradék csak egész számokra alkalmazható. A maradék mindig ugyanazt a jelet kapja, mint az osztó, és abszolút érték kisebb, mint az osztó.

+ -

Hozzáadás és kivonás. Valamennyi numerikus operandusra érvényes.

<< >>

Bal és jobb műszak. Csak egész operandusokra érvényes. A jobb váltás mindig a jelbitet továbbítja.

< > <= >=

A logikai érték kisebb, nagyobb, kisebb vagy egyenlő, és nagyobb vagy egyenlő. Minden operátor 1-et termel, ha a feltétel igaz, 0 egyébként. Ezeket az operátorokat alkalmazhatjuk a karakterláncokra és a numerikus operandusokra is, mely esetben string-összehasonlítást használunk.

== !=

Boolean egyenlő és nem egyenlő. Minden operátor nulla / egy eredményt ad. Valamennyi operandus típushoz érvényes.

&

Bit-bölcs AND. Csak egész operandusokra érvényes.

^

Bit-bölcs kizárólagos VAGY. Csak egész operandusokra érvényes.

|

Bit-bölcs OR. Csak egész operandusokra érvényes.

&&

Logikai ÉS. 1 eredményt produkál, ha mindkét operandus nem nulla, 0 egyébként. Érvényes logikai és numerikus (egész vagy lebegőpontos) operandusokra.

||

Logikai VAGY. 0 eredményt ad, ha mindkét operandus nulla, 1 egyébként. Érvényes logikai és numerikus (egész vagy lebegőpontos) operandusokra.

x ? y : Z

Ha-akkor-más, mint a C. Ha x nem nullára értékeli, akkor az eredmény értéke y . Ellenkező esetben az eredmény a Z . A x az operandusnak numerikus értékkel kell rendelkeznie.

Lásd a C kézikönyvet az egyes piaci szereplők által készített eredményekről. Az összes bináris operátorcsoport balról jobbra ugyanazon elsőbbségi szinten. Például a parancsot

expr 4 * 2 <7

0 értéket ad vissza.

A&&, ||, és?: a szereplők "lusta értékelést" kapnak, mint a C esetében, ami azt jelenti, hogy az operandusokat nem értékelik, ha nincs szükségük az eredmény meghatározására. Például a parancsban

expr {$ v? a: b}

csak egyA vagyB valójában értékelni fogják, attól függően, hogy a$ v. Ne feledje azonban, hogy ez csak akkor igaz, ha az egész kifejezés zárójelben van; ellenkező esetben a Tcl elemző mindkettőt kiértékeliA ésB mielőtt felhívja aexpr parancs.

Matematikai függvények

A Tcl a következő matematikai függvényeket támogatja:

abs kényelmeslogsqrt acos kettőslog10srand mint a exphadifogolyCser atan padlórandtanh atan2 fmodkerek mennyezetet épít vmire hypotbűn kötözősaláta intsinh

ABS ( arg )

Visszaadja az abszolút értékét arg . Arg lehet egész szám vagy lebegőpont, és az eredmény ugyanabban az alakban kerül visszaadásra.

acos ( arg )

Visszaadja az ív koszinuszát arg , a 0, pi radian tartományban. Arg legyen a -1,1 tartományban.

mint a( arg )

Visszaadja az arc szinuszát arg , a -pi / 2, pi / 2 radian tartományban. Arg legyen a -1,1 tartományban.

atan ( arg )

Visszaadja az íves érintőjét arg , a -pi / 2, pi / 2 radian tartományban.

atan2 ( x, y )

Visszaadja az íves érintőjét y / x , a -pi, pi radians tartományban. x és y nem lehet egyszerre 0.

ceil ( arg )

A legkisebb legkisebb értéket adja vissza arg .

kötözősaláta( arg )

Visszatéríti a koszinuszát arg , radianban mérve.

kényelmes( arg )

Visszaadja a hiperbolikus koszinuszot arg . Ha az eredmény túlcsordulást okoz, hiba lép fel.

kettős( arg )

Ha arg egy úszó érték, visszatér arg , egyébként átalakul arg lebegni és visszaadni az átalakított értéket.

exp ( arg )

Visszaadja az exponenciális értékét arg , amelyet e ** -ként definiálnak arg . Ha az eredmény túlcsordulást okoz, hiba lép fel.

padló( arg )

A legnagyobb integrált értéket nem nagyobb, mint arg .

fmod ( x, y )

Visszaküldi a x által y . Ha y 0, hiba érkezik vissza.

hypot ( x, y )

Számítja a derékszögű háromszög hipotenuzusának hosszát ( x * x + y * y ).

int ( arg )

Ha arg egy egész szám, visszatér arg , egyébként átalakul arg egész számra, és visszaadja a konvertált értéket.

log ( arg )

Visszaadja a természetes logaritmust arg . Arg pozitív értéknek kell lennie.

log10 ( arg )

Visszaadja az alap 10 logaritmust arg . Arg pozitív értéknek kell lennie.

hadifogoly( x, y )

Számítja a x felemelték a hatalomra y . Ha x negatív, y egész számnak kell lennie.

rand ()

Egy lebegőpontos számot nulláról kevesebb mint egyre, vagy matematikai szempontból a 0,1 tartományra tér vissza. A vetőmag a gép belső órájából származik, vagy manuálisan beállítható a srand funkcióval.

kerek( arg )

Ha arg egy egész szám, visszatér arg , egyébként átalakul arg egészére kerekítéssel, és visszatéríti az átalakított értéket.

bűn( arg )

Visszaadja a arg , radianban mérve.

sinh ( arg )

Visszaadja a hiperbolikus szinuszot arg . Ha az eredmény túlcsordulást okoz, hiba lép fel.

sqrt ( arg )

Visszaadja a arg . Arg nem negatívnak kell lennie.

srand ( arg )

A arg , melynek egész számnak kell lennie, a véletlenszám-generátor magjának visszaállítására szolgál. Ebből a magból az első véletlen számot adja vissza. Minden tolmács saját maggal rendelkezik.

Cser( arg )

Visszaadja a tangent arg , radianban mérve.

tanh ( arg )

Visszaadja a hiperbolikus tangent arg .

Ezen előre definiált függvények mellett az alkalmazások további funkciókat is meghatározhatnakTcl_CreateMathFunc().

Típusok, túlcsordulás és precízió

Minden belső számítást, amely az egész számokat tartalmazza, a C típussal történik hosszú , és minden lebegőpontos lebonyolításra szolgáló belső számítás C típusú kettős . Amikor egy karakterláncot lebegőpontra konvertál, exponens túlcsordulást érzékel és Tcl hibát eredményez. Ha a karakterláncból egész számra konvertáljuk, akkor a túlcsordulás kimutatása a helyi C könyvtár bizonyos rutinainak viselkedésétől függ, ezért megbízhatatlannak kell lennünk. Mindenesetre az egész szám túlcsordulása és alulfolyása általában nem mutatható ki megbízhatóan a köztes eredményeknél. A lebegőpontos túlcsordulás és alulfolyás érzékelhető a hardver által támogatott mértékben, ami általában elég megbízható.

Az integer, a lebegőpontos és a string operandusok belső ábrázolásai közötti konverzió automatikusan történik, ha szükséges. Az aritmetikai számításokhoz egész számokat használnak addig, amíg újabb lebegőpontos számot vezetnek be, majd lebegőpontot használnak. Például,

expr 5/4

visszatér 1, míg

expr 5 / 4,0 expr 5 / (húrhosszúság "abcd" + 0.0)

mindkettő visszatér 1,25. A lebegőpontos értékeket mindig visszaadja a "`.'' vagy egye így nem fognak egész számokat látni. Például,

expr 20,0 / 5,0

visszatér4.0, nem4.

String műveletek

A string értékeket használhatjuk az összehasonlító operátorok operandusaként, bár a kifejezésértékelő az egész számot vagy lebegőpontot próbálja összehasonlítani, amikor csak lehetséges. Ha az összehasonlítás egyik operandusa egy karakterlánc, a másiknak numerikus értéke van, a numerikus operandust vissza kell konvertálni egy stringre a C sprintf formátum-specifikátor% d egész számokhoz és% g lebegőpontos értékek esetén. Például a parancsok

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

mindkettő visszatér 1. Az első összehasonlítást az egész szám összehasonlításával végezzük, a második pedig a string-összehasonlítással történik, miután a második operandust a stringhez18. Mivel a Tcl hajlamos arra, hogy az értékeket számokkal kezelje, amikor csak lehetséges, általában nem jó ötlet használni a hasonló operátorokat==ha tényleg sztring összehasonlítást akarsz, és az operandusok értékei önkényesek lehetnek; jobb ezekben az esetekben használni ahúr parancs helyett.

Teljesítményi szempontok

A zárójelek kifejezését a legjobb sebesség és a legkisebb tárolási igények közé foglalja. Ez lehetővé teszi a Tcl bytecode fordító számára a legjobb kód létrehozását.

Amint fent említettük, a kifejezések kétszer vannak helyettesítve: egyszer a Tcl elemzővel és egyszer a expr parancs. Például a parancsok

állítsa be a 3 állítsa be b {$ a + 2} expr $ b * 4

vissza 11, nem több, mint 4. Ez azért van, mert a Tcl parser először helyettesíti$ a + 2 a változóhozb, aztán aexpr parancs fogja értékelni a kifejezést$ a + 2 * 4.

A legtöbb kifejezés nem igényel második helyettesítést. Vagy zárójelben vannak elhelyezve, vagy ha nem, a változó és parancs helyettesítésük olyan számokat vagy vonalakat tartalmaz, amelyeknek maguk nem helyettesítik egymást. Azonban, mivel néhány unbraced kifejezésnek két cseréje van, a bytecode fordítónak további utasításokat kell kiadnia a helyzet kezelésére. A legdrágább kód szükséges a nem helyettesíthető kifejezésekhez, amelyek parancscseréket tartalmaznak. Ezeket a kifejezéseket úgy kell végrehajtani, hogy új kódot generálnak minden alkalommal, amikor a kifejezés végrehajtásra kerül.

Kulcsszavak

aritmetikai, logikai, összehasonlítás, kifejezés, fuzzy összehasonlítás

Fontos: Használja a Férfi parancs ( % Férfi ), hogy lássa, hogyan használják a parancsot az adott számítógépen.