Skip to main content

Vše o příkazu Linux / Unix: expr

Fallout 76: Probably getting annoyed whilst attempting to farm scrip (Livestream Playback) (Smět 2025)

Fallout 76: Probably getting annoyed whilst attempting to farm scrip (Livestream Playback) (Smět 2025)
Anonim

název

expr - Vyhodnoťte výraz

Synopse

expr arg ? arg arg … ?

Spojuje arg (přidáním mezery mezi nimi) vyhodnotí výsledek jako výraz Tcl a vrací hodnotu. Operátory povolené v Tcl výrazech jsou podmnožinou operátorů povolených v C výrazech a mají stejný význam a přednost jako odpovídající operátoři C. Výrazy téměř vždy přinášejí číselné výsledky (celočíselné nebo pohyblivé hodnoty). Například výraz

expr 8.2 + 6

hodnotí na 14.2. Výrazy Tcl se liší od výrazů C ve způsobu zadávání operandů. Také výrazy Tcl podporují nečíselné operandy a porovnávání řetězců.

Operandy

Výraz Tcl se skládá z kombinace operandů, operátorů a závorek. Bílý prostor může být použit mezi operandy a operátory a závorky; ignoruje to instrukce výrazu. Kde je to možné, operandy jsou interpretovány jako celočíselné hodnoty. Celočíselné hodnoty mohou být zadány v desítkové (normální), v osmičce (pokud je první znak operandu0) nebo hexadecimální (pokud jsou první dva znaky operandu0x). Pokud operand nemá jeden z výše uvedených celočíselných formátů, pak je s ním zacházeno jako s číslem s plovoucí desetinou, pokud je to možné. Čísla s pohyblivou čárkou mohou být určena některým ze způsobů přijatých kompilátorem C kompatibilními s ANSI (s výjimkou toho, žeF, F, l, aL přípony nebudou povoleny ve většině zařízení). Například všechny následující jsou platné čísla s pohyblivou čárkou: 2.1, 3., 6e4, 7.91e + 16. Není-li možná numerická interpretace, operand je ponechán jako řetězec (a na něj může být použita pouze omezená sada operátorů).

Operandy mohou být zadány jedním z následujících způsobů:

1

Jako číselnou hodnotu, buď celé číslo nebo floating-point.

2

Jako proměnnou Tcl použijte standardní$ notace. Hodnota proměnné bude použita jako operand.

3

Jako řetězec uzavřený v dvojitých uvozovkách. Syntaktický výraz bude provádět zpětné lomítko, proměnné a nahrazení příkazu na informaci mezi úryvky a použije výslednou hodnotu jako operand

4

Jako řetězec uzavřený ve svincích. Postavy mezi otevřenou rovinou a odpovídajícími rovnými úchyty budou použity jako operand bez jakýchkoliv náhrad.

5

Jako příkaz Tcl uzavřený v závorkách. Příkaz bude proveden a jeho výsledek bude použit jako operand.

6

Jako matematická funkce, jejíž argumenty mají některou z výše uvedených forem pro operandy, jako napřsin ($ x). Seznam definovaných funkcí naleznete níže.

Tam, kde dochází k nahrazení nad (například uvnitř citovaných řetězců), jsou prováděny podle pokynů výrazu. Nicméně další vrstva nahrazení již mohla provést příkazový analyzátor před voláním procesoru exprese. Jak je uvedeno níže, je obvykle nejlepší, když se v překryvnách uzavírají výrazy, aby zabránil analyzátoru příkazů provádět náhrady obsahu.

U některých příkladů jednoduchých výrazů předpokládejme proměnnouA má hodnotu 3 a proměnnoubmá hodnotu 6. Potom příkaz na levé straně každého z níže uvedených řádků vytvoří hodnotu na pravé straně řádku:

expr 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5.6 expr 4 * délka "6 2" 8 expr {{slovo jedna} <"slovo $ a"} 0

Operátoři

Platné operátory jsou uvedeny níže, seskupeny v sestupném pořadí:

- + ~ !

Unary mínus, unary plus, bit-moudrý NOT, logický NOT. Žádný z těchto operandů nesmí být použit na řetězec operandy, a bit-mise NOT může být aplikován pouze na celá čísla.

* / %

Vynásobit, rozdělit, zbytek. Žádný z těchto operandů nesmí být použit pro řetězcové operandy a zbytek může být aplikován pouze na celá čísla. Zbytek bude mít vždy stejné znaménko jako dělitel a absolutní hodnotu menší než dělitel.

+ -

Přidat a odečíst. Platí pro libovolné číselné operandy.

<< >>

Levý a pravý posun. Platí pouze pro celé operandy. Pravý posun vždy propaguje znaménkový bit.

< > <= >=

Boolean menší, větší, menší nebo rovné a větší nebo rovné. Každý operátor vytvoří 1, pokud je podmínka pravdivá, 0 jinak. Tyto operátory mohou být použity na řetězce i na číselné operandy, v tomto případě je použito porovnání řetězců.

== !=

Boolean je rovný a není stejný. Každý operátor vytvoří výsledek nula / jeden. Platí pro všechny typy operandů.

&

Bitově a AND. Platí pouze pro celé operandy.

^

Kousek exkluzivní OR. Platí pouze pro celé operandy.

|

Bitově nebo NEBO. Platí pouze pro celé operandy.

&&

Logické AND. Vytvoří 1 výsledek, pokud oba operandy jsou nenulové, jinak 0. Platí pouze pro booleovské a číselné (celočíselné nebo plovoucí body) operandy.

||

Logické OR. Výsledkem je 0, pokud jsou obě operandy nulové, 1 jinak. Platí pouze pro booleovské a číselné (celočíselné nebo plovoucí body) operandy.

X ? y : z

Pokud-pak-jinak, stejně jako v C. Pokud X vyhodnocena nenulová hodnota, výsledkem je hodnota y . V opačném případě je výsledkem hodnota z . The X operand musí mít číselnou hodnotu.

Podrobnější informace o výsledcích jednotlivých operátorů naleznete v příručce C. Všechny skupiny binárních operátorů se shodují z stejné úrovně přednosti. Například příkaz

expr 4 * 2 <7

vrátí 0.

The&&, ||, a?: operátoři mají `` lenivé hodnocení '' stejně jako v C, což znamená, že operandy nejsou hodnoceny, pokud nejsou potřebné k určení výsledku. Například v příkazu

expr {$ v? a: b

pouze jeden z nichA nebob bude skutečně hodnocena v závislosti na hodnotě$ v. Všimněte si však, že to platí pouze tehdy, pokud je celý výraz uzavřen ve svincích; jinak analyzátor Tcl vyhodnotí oběA ab před vyvolánímexpr příkaz.

Matematické funkce

Tcl podporuje následující matematické funkce ve výrazech:

břišní svaly coshlogsqrt acos dvojnásobeklog10srand jako v exppowopálení opálení podlaharandtanh atan2 fmodkolo stropy hypothřích cos intsinh

břišní svaly( arg )

Vrací absolutní hodnotu arg . Arg může být buď celočíselný nebo pohyblivý bod a výsledek je vrácen ve stejné podobě.

acos ( arg )

Vrací obloukové kosinus arg , v rozsahu 0, pi radiánů. Arg by měl být v rozmezí -1,1.

jako v( arg )

Vrací oblouk sinus z arg , v rozsahu -pi / 2, pi / 2 radiány. Arg by měl být v rozmezí -1,1.

opálení( arg )

Vrací tangenciální oblouk arg , v rozsahu -pi / 2, pi / 2 radiány.

atan2 ( x, y )

Vrací tangenciální oblouk y / X , v rozsahu -pi, pi radians. X a y nelze oba být 0.

ceil ( arg )

Vrací nejmenší celočíselnou hodnotu nejméně arg .

cos ( arg )

Vrací cosinus z arg , měřeno v radiánech.

cosh ( arg )

Vrátí hyperbolický kosinus arg . Pokud výsledek způsobí přetečení, vrátí se chyba.

dvojnásobek( arg )

Li arg je floating hodnota, vrátí se arg , jinak převede arg k plovoucí a vrátí převedenou hodnotu.

exp ( arg )

Vrací exponenciální hodnotu arg , definované jako e ** arg . Pokud výsledek způsobí přetečení, vrátí se chyba.

podlaha( arg )

Vrací největší integrální hodnotu ne větší než arg .

fmod ( x, y )

Vrací zbývající část rozdělení rozdělení X podle y . Li y je 0, je vrácena chyba.

hypot ( x, y )

Vypočítá délku hypotenze pravoúhlého trojúhelníku ( X * X + y * y ).

int ( arg )

Li arg je celočíselná hodnota, vrátí se arg , jinak převede arg na celé číslo zkrácením a vrátí převedenou hodnotu.

log ( arg )

Vrací přirozený logaritmus arg . Arg musí být pozitivní hodnota.

log10 ( arg )

Vrací logaritmus základny 10 arg . Arg musí být pozitivní hodnota.

pow ( x, y )

Vypočítá hodnotu X zvednutý k síti y . Li X je negativní, y musí být celočíselná hodnota.

rand ()

Vrací číslo s plovoucí desetinou z nuly na méně než jednu nebo z matematického hlediska rozsah 0,1. Osivo pochází z vnitřních hodin stroje nebo může být nastaveno manuálně pomocí funkce srand.

kolo( arg )

Li arg je celočíselná hodnota, vrátí se arg , jinak převede arg na celé číslo zaokrouhleno a vrátí převedenou hodnotu.

hřích( arg )

Vrací sinus z arg , měřeno v radiánech.

sinh ( arg )

Vrátí hyperbolický sinus arg . Pokud výsledek způsobí přetečení, vrátí se chyba.

sqrt ( arg )

Vrací druhou odmocninu arg . Arg nesmí být negativní.

srand ( arg )

The arg , které musí být celé číslo, se používá k resetování osiva generátoru náhodných čísel. Vrací první náhodné číslo z tohoto semena. Každý tlumočník má své vlastní osivo.

opálení( arg )

Vrací dotykovou hodnotu arg , měřeno v radiánech.

tanh ( arg )

Vrací hyperbolickou tečnu arg .

Kromě těchto předdefinovaných funkcí mohou aplikace definovat další funkce pomocíTcl_CreateMathFunc().

Typy, přetečení a přesnost

Všechny interní výpočty zahrnující celá čísla se provádějí s typem C dlouho a všechny interní výpočty zahrnující plovoucí bod se provádějí s typem C dvojnásobek . Při převodu řetězce na plovoucí bod je zjištěn přetečení exponentu a výsledkem je chyba Tcl. Pro konverzi na celé číslo z řetězce, detekce přetečení závisí na chování některých rutin v místní knihovně C, takže by měla být považována za nespolehlivou. V každém případě celkový přetečení a podtlak nejsou obecně spolehlivě zjištěny pro průběžné výsledky. Přetečení s plovoucí desetinnou čárkou a podtok je zjištěno v míře podporované hardwarem, což je obecně docela spolehlivé.

Konverze mezi interními reprezentacemi pro operátory s celočíselným, plovoucím a řetězovým operandem se provádí automaticky podle potřeby. Pro aritmetické výpočty se používají celá čísla, dokud se neprovede číslo s plovoucí desetinnou čárkou a poté se použije pohyblivá čárka. Například,

expr 5/4

vrátí 1, zatímco

expr 5 / 4.0 expr 5 / (délka řetězce "abcd" + 0.0)

oba vracejí 1,25. Hodnoty s pohyblivou čárkou jsou vždy vráceny znakem ``.'nebo anE takže nebudou vypadat jako celočíselné hodnoty. Například,

expr 20,0 / 5,0

vrátí se4.0, ne4.

Operace řetězce

Hodnoty řetězce mohou být použity jako operandy srovnávacích operátorů, i když se hodnotitel výrazu pokusí provést srovnání jako celočíselný nebo pohyblivý bod, když to může. Pokud je jeden z operandů porovnání řetězec a druhý má číselnou hodnotu, číselný operand se převede zpět na řetězec pomocí příkazu C sprintf specifikátor formátu% d pro celé čísla a%G pro hodnoty s plovoucí desetinnou čárkou. Například příkazy

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

oba vrátí 1. První porovnání se provádí pomocí porovnání celých čísel a druhé je provedeno porovnáním řetězců poté, co byl druhý operand převeden na řetězec18. Kvůli Tclově tendenci počítat s hodnotami jako čísla vždy, když je to možné, není obecně dobrý nápad používat operátory jako==když opravdu chcete porovnání řetězců a hodnoty operandů mohou být libovolné; je lepší v těchto případech použítřetězec příkaz místo toho.

Účinky

Přiložte výrazy do ramen pro nejlepší rychlost a nejmenší požadavky na skladování. To umožňuje kompilátoru Tcl bytecode vygenerovat nejlepší kód.

Jak bylo uvedeno výše, výrazy jsou nahrazeny dvakrát: jednou pomocí analyzátoru Tcl a jednou pomocí expr příkaz. Například příkazy

nastavte hodnotu 3 nastavit b {$ a + 2} expr $ b * 4

návrat 11, ne násobek 4. Je to proto, že analyzátor Tcl bude nejprve nahradit$ a + 2 pro proměnnoub, pakexpr příkaz vyhodnotí výraz$ a + 2 * 4.

Většina výrazů nevyžaduje druhé kolo substitucí. Buď jsou uzavřeny ve svincích, nebo pokud ne, jejich variabilní a příkazové substituce poskytují čísla nebo řetězce, které samy o sobě nevyžadují náhradu. Protože však několik nevyžádaných výrazů potřebuje dvě kola nahrazení, kompilátor bytecode musí vydávat další pokyny k vyřešení této situace. Nejkrajnější kód je vyžadován pro nezpracované výrazy, které obsahují nahrazení příkazu. Tyto výrazy musí být implementovány generováním nového kódu při každém spuštění výrazu.

Klíčová slova

aritmetický, booleovský, porovnávat, výraz, fuzzy srovnání

Důležité: Použijte muž příkaz ( % muž ), abyste zjistili, jak je v daném počítači použit příkaz.