GoGPT Best VPN GoSearch

Favicon OnWorks

awkposix - Online în cloud

Rulați awkposix în furnizorul de găzduire gratuit OnWorks prin Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

Aceasta este comanda awkposix care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

PROGRAM:

NUME


awk — limbaj de scanare și procesare a modelelor

REZUMAT


Wow [−F sepstring] [−v cesiune]... program [argument...]

Wow [−F sepstring] −f profil [−f profil]... [−v cesiune]...
[argument...]

DESCRIERE


Wow utilitarul va executa programe scrise în Wow limbaj de programare, care este
specializat pentru manipularea datelor textuale. Un Wow programul este o succesiune de modele și
acțiunile corespunzătoare. Când este citită intrarea care se potrivește cu un model, acțiunea este asociată
cu acel model se realizează.

Intrarea va fi interpretată ca o succesiune de înregistrări. În mod implicit, o înregistrare este o linie, mai puțin
terminarea ei , dar acest lucru poate fi schimbat utilizând RS variabilă încorporată. Fiecare
înregistrarea intrărilor va fi corelată pe rând cu fiecare model din program. Pentru fiecare
modelul potrivit, acțiunea asociată va fi executată.

Wow utilitatea va interpreta fiecare înregistrare de intrare ca o secvență de câmpuri în care, prin
implicit, un câmp este un șir de non- non- personaje. Această implicită
și delimitatorul câmpului poate fi modificat utilizând FS variabila încorporată sau −F
sepstring opțiune. Wow utilitatea va indica primul câmp dintr-o înregistrare $1, al doilea
2 dolari și așa mai departe. Simbolul $0 se referă la întreaga înregistrare; stabilirea oricărui alt câmp
determină reevaluarea lui $0. Atribuirea la $0 va reseta valorile tuturor celorlalte câmpuri
si NF variabilă încorporată.

OPŢIUNI


Wow utilitatea trebuie să se conformeze volumului Definiții de bază din POSIX.1-2008, Secțiune
12.2, Utilitate Sintaxă Instrucțiuni.

Următoarele opțiuni vor fi acceptate:

−F sepstring
Definiți separatorul câmpului de intrare. Această opțiune este echivalentă cu:

-v FS =sepstring

cu excepţia faptului că dacă −F sepstring și −v FS =sepstring sunt ambele folosite, nu este specificat
dacă FS misiunea rezultată din −F sepstring este procesat la comandă
comandă de linie sau este procesată după ultima −v FS =sepstring. Vezi descrierea
a FS variabilă încorporată și modul în care este utilizată, în DESCRIEREA EXTINSĂ
secţiune.

−f profil
Specificați calea fișierului profil care conține un Wow program. Un nume de cale
of '-' va indica intrarea standard. Dacă mai multe instanțe ale acestei opțiuni sunt
specificat, concatenarea fișierelor specificate ca profil in ordinea
specificat va fi Wow program. The Wow programul poate fi alternativ
specificat în linia de comandă ca un singur argument.

−v cesiune
Cererea trebuie să asigure că cesiune argumentul este în aceeași formă ca
an cesiune operand. Alocarea variabilei specificate va avea loc înainte de
executând Wow program, inclusiv acțiunile asociate cu ÎNCEPE modele
(dacă există). Pot fi specificate mai multe apariții ale acestei opțiuni.

OPERANDE


Următorii operanzi vor fi acceptați:

program Daca nu −f este specificată opțiunea, primul operand la Wow va fi textul
Wow program. Cererea va furniza program operand ca un singur
argument pentru Wow. Dacă textul nu se termină cu a , Wow va interpreta
textul de parcă ar fi făcut-o.

argument Oricare dintre următoarele două tipuri de argument pot fi amestecate:

fişier O cale a unui fișier care conține intrarea de citit, adică
corelate cu setul de modele din program. Daca nu fişier
operanzii sunt specificați sau dacă a fişier operandul este '-', Standardul
va fi utilizată intrarea.

cesiune
Un operand care începe cu un sau caracter alfabetic
din setul de caractere portabil (vezi tabelul din Definițiile de bază
volumul POSIX.1‐2008, Secțiune 6.1, Portabil Caracter set), urmat
printr-o succesiune de caractere de subliniere, cifre și alfabete din
set de caractere portabil, urmat de '=' caracter, va specifica a
atribuirea variabilei mai degrabă decât un nume de cale. Personajele dinaintea
'=' reprezintă numele unui Wow variabil; dacă acel nume este un Wow
cuvânt rezervat (vezi Gramatică) comportamentul este nedefinit. Personajele
urmărind vor fi interpretate ca și cum ar fi apărut
în Wow program precedat și urmat de ghilimele duble ('"')
caracter, ca a STRING jeton (vezi Gramatică), cu excepția faptului că dacă este ultimul
personajul este un neevadat , se interpretează ca a
literal mai degrabă decât ca prim caracter al secvenței
"\"". Variabilei i se atribuie valoarea acesteia STRING semn
și, dacă este cazul, va fi considerat a numeric şir (A se vedea
Expresii in Wow), variabilei i se va atribui și numărul său numeric
valoare. Fiecare astfel de atribuire a variabilei va avea loc chiar înainte de
prelucrarea urmatoarelor fişier, dacă este cazul. Astfel, o misiune înainte
prima fişier argumentul va fi executat după ÎNCEPE acțiuni (dacă
oricare), în timp ce o misiune după ultima fişier va avea loc un argument
inainte de Sfârşit acțiuni (dacă există). Dacă nu există fişier argumente,
atribuirile vor fi executate înainte de procesarea intrării standard.

Stdin


Intrarea standard va fi utilizată numai dacă nu fişier operanzii sunt specificați sau dacă a fişier
operandul este '-', sau dacă a profil argument-opțiune este '-'; consultați secțiunea FIȘIERE DE INTRARE. Dacă
il Wow programul nu conține acțiuni și nici modele, dar este, în rest, valid Wow program
intrare standard și orice fişier operanzii nu se citesc și Wow va ieși cu întoarcere
starea de zero.

INTRARE DOSARE


Fișiere de intrare în Wow programul din oricare dintre următoarele surse vor fi fișiere text:

* Orice fişier operanzi sau echivalentele acestora, realizate prin modificarea Wow variabile ARGV
și ARGC

* Intrare standard în absența niciunuia fişier operanzi

* Argumente la getline funcţie

Fie că variabila RS este setată la o altă valoare decât a sau nu, pentru aceste fișiere,
implementările vor suporta înregistrări terminate cu separatorul specificat până la
{LINE_MAX} octeți și poate accepta înregistrări mai lungi.

If −f profil este specificat, aplicația va asigura că fișierele denumite de fiecare dintre
il profil argumentele-opțiune sunt fișiere text și concatenarea lor, în aceeași ordine ca
ele apar în argumente, este an Wow programul.

MEDIUL VARIABILE


Următoarele variabile de mediu vor afecta execuția Wow:

LIMBA Furnizați o valoare implicită pentru variabilele de internaționalizare care sunt nesetate sau
nul. (A se vedea volumul Definiții de bază din POSIX.1‐2008, Secțiune 8.2,
Internaționalizare Variabile pentru prioritatea internaţionalizării
variabile utilizate pentru a determina valorile categoriilor locale.)

LC_ALL Dacă este setată la o valoare șir nevid, suprascrieți valorile tuturor celorlalte
variabile de internaţionalizare.

LC_COLLATE
Determinați locația pentru comportamentul intervalelor, claselor de echivalență și multi-
caractere care colecționează elemente în expresiile regulate și în comparații ale
valori de șir.

LC_CTYPE Determinați locația pentru interpretarea secvențelor de octeți de date text
ca caractere (de exemplu, caractere pe un singur octet, spre deosebire de caractere pe mai mulți octeți în
argumente și fișiere de intrare), comportamentul claselor de caractere în cadrul obișnuit
expresii, identificarea caracterelor ca litere și maparea
caractere majuscule și minuscule pentru tupper și pentru a reduce funcții.

LC_MESSAGES
Determinați locația care ar trebui utilizată pentru a afecta formatul și conținutul
mesaje de diagnostic scrise la eroare standard.

LC_NUMERIC
Determinați caracterul radix utilizat la interpretarea intrării numerice, efectuarea
conversii între valorile numerice și șiruri de caractere și formatarea ieșirii numerice.
Indiferent de locație, caracterul (caracterul cu virgulă zecimală al
Localizare POSIX) este caracterul cu virgulă zecimală recunoscut în procesare Wow
programe (inclusiv atribuiri în argumentele liniei de comandă).

NLSPATH Determinați locația cataloagelor de mesaje pentru procesarea LC_MESSAGES.

PATH Determinați calea de căutare atunci când căutați comenzi executate de sistem(expres), sau
conducte de intrare și ieșire; vezi volumul Definiții de bază din POSIX.1‐2008, Capitol
8, Mediu inconjurator Variabile.

În plus, toate variabilele de mediu trebuie să fie vizibile prin intermediul Wow variabil MEDIU.

ASINCRON EVENIMENTE


Implicit.

Stdout


Natura fișierelor de ieșire depinde de Wow programul.

Stderr


Eroarea standard va fi utilizată numai pentru mesajele de diagnosticare.

REZULTATE DOSARE


Natura fișierelor de ieșire depinde de Wow programul.

EXTENDED DESCRIERE


Salopete Program Structure
An Wow programul este compus din perechi de forma:

model { acțiune }

Fie modelul, fie acțiunea (inclusiv caracterele acolade incluse) pot fi
omis.

Un model lipsă trebuie să se potrivească cu orice înregistrare de intrare, iar o acțiune lipsă va fi
echivalentă cu:

{ imprima }

Executarea Wow programul va începe prin a executa mai întâi acțiunile asociate cu
toate ÎNCEPE tipare în ordinea în care apar în program. Apoi fiecare fişier operand (sau
intrare standard dacă nu au fost specificate fișiere) vor fi procesate pe rând prin citirea datelor din
fișierul până când se vede un separator de înregistrare ( în mod implicit). Înainte de prima
este evaluată referirea la un câmp din înregistrare, înregistrarea va fi împărțită în câmpuri,
conform regulilor din Regulat Expresii, folosind valoarea lui FS care era curent la
ora în care a fost citit înregistrarea. Fiecare model din program va fi apoi evaluat în
ordinea apariției și acțiunea asociată fiecărui model care se potrivește cu curentul
înregistrarea executată. Acțiunea pentru un model de potrivire va fi executată înainte de evaluare
modele ulterioare. În sfârșit, acțiunile asociate cu toate Sfârşit modelele vor fi
executate în ordinea în care apar în program.

Expresii in Wow
Expresiile descriu calculele utilizate în modele și acțiuni. În tabelul următor,
operațiunile de expresie valide sunt date în grupuri de la cea mai mare prioritate prima la cea mai mică
prioritate ultima, cu operatori de prioritate egală grupați între linii orizontale. În
evaluarea expresiei, unde gramatica este ambiguă din punct de vedere formal, prioritate mai mare
operatorii vor fi evaluați înaintea operatorilor cu prioritate mai mică. În acest tabel expres, expr1,
expr2 și expr3 reprezintă orice expresie, în timp ce lvalue reprezintă orice entitate care poate fi
atribuit la (adică în partea stângă a unui operator de atribuire). Sintaxa precisă a
expresii este dat în Gramatică.

Tabel 4-1: Expresii in In scadere Precedenta in Wow

┌─────────────────────┬─────────────────────────┬─ ───────────────┬──────────────┐
SintaxăNumeTip of RezultatAsociativitate
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
│( expres ) │Gruparea │Tipul de expres │N/A │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
│$expres │Referință câmp │Șir │N/A │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
│lvalue ++ │Post-increment │Numeric │N/A │
│lvalue −− │Post-decrement │Numeric │N/A │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
│++ lvalue │Pre-increment │Numeric │N/A │
│−− lvalue │Pre-decrementare │Numeric │N/A │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
expres ^ expres │Exponentiație │Numeric │Dreapta │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
│! expres │Logic nu │Numeric │N/A │
│+ expres │Unar plus │Numeric │N/A │
│− expres │Minus unar │Numeric │N/A │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
expres * expres │Multiplicare │Numeric │Stânga │
expres / expres │Diviziune │Numeric │Stânga │
expres % expres │Modul │Numeric │Stânga │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
expres + expres │Adăugare │Numeric │Stânga │
expres - expres │Scădere │Numeric │Stânga │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
expres expres │Concatenare șir │Șir │Stânga │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
expres < expres │Mai puțin decât │Numeric │Niciuna │
expres <= expres │Mai mic sau egal cu │Numeric │Niciunul │
expres != expres │Nu este egal cu │Numeric │Niciunul │
expres == expres │Egal cu │Numeric │Niciuna │
expres > expres │Mai mare decât │Numeric │Niciunul │
expres >= expres │Mai mare sau egal cu │Numeric │Niciunul │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
expres ~ expres │Potrivire ERE │Numeric │Niciunul │
expres !~ expres │ERE nepotrivită │Numeric │Niciuna │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
expres în matrice │ Apartenența la matrice │Numeric │Stânga │
│( index ) în mulțime │Matrice multidimensională │Numeric │Stânga │
│ │calitatea de membru │ │ │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
expres && expres │ȘI logic │Numeric │Stânga │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
expres || expres │SAU logic │Numeric │Stânga │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
expr1 ? expr2 : expr3│Expresie condiționată │Tipul selectat│Dreapta │
│ │ │expr2 or expr3 │ │
├─────────────────────┼─────────────────────────┼─ ───────────────┼──────────────┤
│lvaloarea ^= expres │Atribuirea exponențiației│Numeric │Dreapta │
│lvaloarea %= expres │Atribuire modul │Numeric │Dreapta │
│lvaloare *= expres │Atribuirea înmulțirii│Numeric │Dreapta │
│lvaloare /= expres │Atribuire diviziune │Numeric │Dreapta │
│lvaloare += expres │Atribuire adaos │Numeric │Dreapta │
│lvaloarea −= expres │Atribuire scădere │Numeric │Dreapta │
│lvaloare = expres │Atribuire │Tip de expres │Dreapta │
└─────────────────────┴─────────────────────────┴─ ───────────────┴──────────────┘
Fiecare expresie trebuie să aibă fie o valoare șir, o valoare numerică sau ambele. Cu excepția faptului că
pentru contexte specifice, valoarea unei expresii va fi implicit convertită în
tipul necesar pentru contextul în care este utilizat. O valoare șir va fi convertită în
o valoare numerică fie prin echivalentul următoarelor apeluri la funcții definite de
standardul ISO C:

setlocale(LC_NUMERIC, "");
valoare numerica = atof(valoare_șir);

sau prin conversia porțiunii inițiale a șirului în tip dubla reprezentare ca
urmează:

Șirul de intrare este descompus în două părți: o secvență inițială, eventual goală
de caractere cu spații albe (după cum este specificat de isspace()) și o secvență de subiect
interpretată ca o constantă în virgulă mobilă.

Forma așteptată a secvenței subiect este opțională „+” or '-' semn, apoi a
secvență nevidă de cifre care conține opțional a , apoi opțional
parte de exponent. O parte de exponent este formată din 'e' or „E”, urmat de un opțional
semn, urmat de una sau mai multe cifre zecimale.

Secvența care începe cu prima cifră sau cu (oricare se intampla mai intai)
este interpretată ca o constantă flotantă a limbajului C și, dacă nici un exponent
parte nici a apare, a se presupune că urmează ultima cifră din
şir. Dacă secvența subiectului începe cu semnul minus, valoarea rezultată din
conversia este anulată.

O valoare numerică care este exact egală cu valoarea unui număr întreg (vezi Secțiune 1.1.2,
concepte Derivat din il ISO C Standard) vor fi convertite într-un șir prin echivalent
a unui apel către sprint funcție (vezi Şir funcţii) cu sfoara „%d” ca fmt
argument și valoarea numerică fiind convertită ca prima și singura expres argument. Orice
altă valoare numerică va fi convertită într-un șir prin echivalentul unui apel la
sprint funcţionează cu valoarea variabilei CONVFMT ca fmt argument și cel
valoarea numerică fiind convertită ca prima și singura expres argument. Rezultatul
conversia este nespecificată dacă valoarea lui CONVFMT nu este un format în virgulă mobilă
specificație. Acest volum al POSIX.1‐2008 nu specifică nicio conversie explicită între
numere și șiruri. O aplicație poate forța o expresie să fie tratată ca un număr de
adăugând zero la acesta sau poate forța să fie tratat ca un șir prin concatenarea nulului
șir ("") la ea.

O valoare șir va fi considerată a numeric şir dacă provine din una dintre următoarele:

1. Variabile de câmp

2. Intrare de la getline() funcție

3. NUME DE FIȘIER

4. ARGV elemente matrice

5. MEDIU elemente matrice

6. Elemente de matrice create de împărţi() funcție

7. O alocare de variabile în linia de comandă

8. Alocarea variabilei dintr-o altă variabilă șir numerică

și o condiție dependentă de implementare care corespunde oricărui caz (a) sau (b) de mai jos este
întâlnit.

A. După echivalentul următoarelor apeluri la funcții definite de ISO C
standard, string_value_end ar diferi de valoare_șir, și orice caractere înainte
caracterul nul final în string_value_end va fi personaje:

car de război *string_value_end;
setlocale(LC_NUMERIC, "");
valoare numerica = strtod (valoare_șir, &string_value_end);

b. După ce au fost aplicate toate conversiile următoare, șirul rezultat ar fi
lexical să fie recunoscut ca a NUMĂR token așa cum este descris de convențiile lexicale din
Gramatică:

-- Toate în frunte și în urmă caracterele sunt aruncate.

-- Dacă primul non- este „+” or '-', este aruncat.

-- Fiecare apariție a caracterului punct zecimal din localitatea curentă este schimbată
la a .
În cazul (a) valoarea numerică a numeric şir va fi valoarea care ar fi
returnat de către strtod() apel. În cazul (b), dacă primul non- este '-', numeric
valoarea numeric şir va fi negația valorii numerice a recunoscutului
NUMĂR jeton; în caz contrar, valoarea numerică a numeric şir va fi numeric
valoarea recunoscută NUMĂR jeton. Indiferent dacă un șir este sau nu a numeric şir ar trebui sa fie
relevante numai în contextele în care termenul respectiv este utilizat în această secțiune.

Când o expresie este utilizată într-un context boolean, dacă are o valoare numerică, o valoare de
zero va fi tratat ca fals și orice altă valoare va fi tratată ca adevărată. În caz contrar, a
valoarea șirului șirului nul va fi tratată ca falsă și orice altă valoare va fi
tratat ca adevărat. Un context boolean trebuie să fie unul dintre următoarele:

* Prima subexpresie a unei expresii condiționale

* O expresie operată de NOT logic, AND logic sau OR logic

* A doua expresie a lui a pentru declaraţie

* Expresia lui an if declaraţie

* Expresia lui în timp ce clauză fie în a în timp ce or do...în timp ce declaraţie

* O expresie folosită ca model (ca în Structura generală a programului)

Toată aritmetica trebuie să urmeze semantica aritmeticii în virgulă mobilă, așa cum este specificată de
Standardul ISO C (vezi Secțiune 1.1.2, concepte Derivat din il ISO C Standard).

Valoarea expresiei:

expr1 ^ expr2

trebuie să fie echivalentă cu valoarea returnată de apelul funcției standard ISO C:

pow(expr1, expr2)

Expresia:

lvaloarea ^= expres

trebuie să fie echivalentă cu expresia standard ISO C:

lvaloarea = pow(lvaloarea, expres)

cu excepția faptului că lvalue va fi evaluată o singură dată. Valoarea expresiei:

expr1 % expr2

trebuie să fie echivalentă cu valoarea returnată de apelul funcției standard ISO C:

fmod(expr1, expr2)

Expresia:

lvaloarea %= expres

trebuie să fie echivalentă cu expresia standard ISO C:

lvaloarea = fmod(lvalue, expres)

cu excepția faptului că lvalue va fi evaluată o singură dată.

Variabilele și câmpurile vor fi stabilite de instrucțiunea de atribuire:

lvaloarea = expresie

și tipul de expresie va determina tipul de variabilă rezultat. Atribuirea
include sarcinile aritmetice ("+=", "−=", "*=", "/=", "%=", "^=", "++", "--") toate
din care va produce un rezultat numeric. Partea stângă a unei sarcini și
ținta operatorilor de creștere și decrementare poate fi unul dintre o variabilă, o matrice cu index,
sau un selector de câmp.

Wow limbajul furnizează matrice care sunt utilizate pentru stocarea numerelor sau șirurilor de caractere. Matrice
nu trebuie declarat. Acestea vor fi inițial goale, iar dimensiunile lor se vor schimba
dinamic. Indicele, sau identificatorii de elemente, sunt șiruri de caractere, oferind un tip de
capacitatea de matrice asociativă. Un nume de matrice urmat de un indice între paranteze pătrate
poate fi folosit ca o valoare l și astfel ca o expresie, așa cum este descris în gramatică; vedea
Gramatică. Numele de matrice nesubscriptoare pot fi utilizate numai în următoarele contexte:

* Un parametru dintr-o definiție de funcție sau un apel de funcție

* NUME jeton în urma oricărei utilizări a cuvântului cheie in așa cum este specificat în gramatică (vezi
Gramatică); dacă numele folosit în acest context nu este un nume de matrice, comportamentul este
nedefinit

O matrice validă index va consta din unul sau mai multe -expresii separate, asemănătoare cu
modul în care tablourile multidimensionale sunt indexate în unele limbaje de programare.
pentru că Wow tablourile sunt într-adevăr unidimensionale, de exemplu -listă separată trebuie să fie
convertit într-un singur șir prin concatenarea valorilor șirului separat
expresii, separate fiecare de alta prin valoarea lui SUBEP variabil. Astfel, cel
următoarele două operațiuni de index sunt echivalente:

a fost[expr1, expr2, ... exprn]

a fost[expr1 SUBEP expr2 SUBSEP ... SUBSEP exprn]

Aplicația trebuie să asigure că un multi-dimensionat index folosit cu in operatorul este
parantezat. The in operator, care testează existența unui anumit tablou
element, nu va determina existența acelui element. Orice altă referire la o matrice inexistentă
elementul îl va crea automat.

Comparații (cu „<”, „<=", "!=", "==", '>' și ">=" operatori) se va face
numeric dacă ambii operanzi sunt numerici, dacă unul este numeric și celălalt are un șir
valoare care este un șir numeric sau dacă unul este numeric, iar celălalt are cel neinițializat
valoare. În caz contrar, operanzii vor fi convertiți în șiruri după cum este necesar și un șir
compararea se face folosind secvența de colare specifică localității. Valoarea
expresia de comparație va fi 1 dacă relația este adevărată sau 0 dacă relația este falsă.

Variabile și Special Variabile
Variabilele pot fi utilizate într-un Wow program prin referire la ele. Cu exceptia
parametrii funcției (vezi Definit de utilizator funcţii), nu sunt declarate în mod explicit.
Numele parametrilor funcției trebuie să fie locale pentru funcție; toate celelalte nume de variabile trebuie să fie
global. Același nume nu trebuie utilizat atât ca nume de parametru de funcție, cât și ca nume
a unei funcţii sau a unui special Wow variabil. Același nume nu va fi folosit atât ca a
nume variabilă cu domeniu global și ca nume al unei funcții. Nu va fi același nume
utilizat în același domeniu atât ca variabilă scalară, cât și ca matrice. Neinițializat
variabilele, inclusiv variabilele scalare, elementele matricei și variabilele de câmp, trebuie să aibă un
valoare neinițializată. O valoare neinițializată trebuie să aibă atât o valoare numerică zero, cât și o valoare a
valoarea șirului de caractere a șirului gol. Evaluarea variabilelor cu o valoare neinițializată, la
fie șir, fie numeric, vor fi determinate de contextul în care sunt utilizate.

Variabilele câmpului vor fi desemnate prin a „$” urmată de un număr sau o expresie numerică.
Efectul numărului câmpului expresie evaluând la orice altceva decât un nenegativ
întregul este nespecificat; variabilele neinițializate sau valorile șirului nu trebuie convertite în
valori numerice în acest context. Noile variabile de câmp pot fi create prin alocarea unei valori lui
lor. Referințe la câmpuri inexistente (adică câmpuri după $NF), va evalua la
valoare neinițializată. Astfel de referințe nu vor crea câmpuri noi. Cu toate acestea, atribuirea unui
câmp inexistent (de exemplu, $(NF+2)=5) va crește valoarea lui NF; crea orice
câmpuri intervenite cu valoarea neinițializată; și determină valoarea de $0 să fie
recalculat, câmpurile fiind separate prin valoarea lui FSO. Fiecare variabilă de câmp
va avea o valoare șir sau o valoare neinițializată atunci când este creat. Variabilele de câmp trebuie
au valoarea neinițializată atunci când sunt create de la $0 folosind FS iar variabila nu
conţin orice caractere. Dacă este cazul, variabila câmp va fi considerată numerică
șir (vezi Expresii in Wow).

Implementările vor suporta următoarele alte variabile speciale care sunt stabilite de Wow:

ARGC Numărul de elemente din ARGV matrice.

ARGV O serie de argumente ale liniei de comandă, excluzând opțiunile și program argument,
numerotate de la zero la ARGC-1.

Argumentele din ARGV poate fi modificat sau adăugat la; ARGC pot fi modificate. Ca fiecare
fișierul de intrare se termină, Wow va trata următorul element non-nul al ARGV, până la
valoarea curentă a ARGC−1, inclusiv, ca nume al următorului fișier de intrare. Prin urmare,
stabilirea unui element de ARGV a nul înseamnă că nu va fi tratat ca un
fișier de intrare. Numele '-' indică intrarea standard. Dacă un argument se potrivește
formatul unui cesiune operand, acest argument va fi tratat ca un
cesiune mai degrabă decât o fişier a susținut.

CONVFMT printf format pentru conversia numerelor în șiruri de caractere (cu excepția ieșirii
declarații, unde OFMT este folosit); „%.6g” în mod implicit.

MEDIU O matrice care reprezintă valoarea mediului, așa cum este descris în Exec
funcții definite în volumul System Interfaces din POSIX.1‐2008. Indicii
ale matricei trebuie să fie șiruri formate din numele mediului
variabile, iar valoarea fiecărui element de matrice va fi un șir format din
valoarea acelei variabile. Dacă este cazul, variabila de mediu trebuie să fie
considerat a numeric şir (A se vedea Expresii in Wow); elementul de matrice trebuie
au și valoarea sa numerică.

În toate cazurile în care comportamentul de Wow este afectată de variabilele de mediu
(inclusiv mediul oricăror comenzi care Wow execută prin intermediul sistem
funcția sau prin redirecționări pipeline cu imprima declarație, cel printf
declarația sau getline funcția), mediul utilizat va fi
mediu în acea vreme Wow a început să execute; este definit de implementare
fie vreo modificare a MEDIU afectează acest mediu.

NUME DE FIȘIER O cale a fișierului de intrare curent. În interiorul a ÎNCEPE acțiune valoarea este
nedefinit. În interiorul unui Sfârşit acțiunea valoarea va fi numele ultimei intrări
dosar procesat.

FNR Numărul ordinal al înregistrării curente din fișierul curent. În interiorul a ÎNCEPE
acțiune, valoarea va fi zero. În interiorul unui Sfârşit acțiune valoarea va fi
numărul ultimei înregistrări procesate în ultimul fișier procesat.

FS Separator câmp de intrare expresie regulată; A în mod implicit.

NF Numărul de câmpuri din înregistrarea curentă. În interiorul a ÎNCEPE actiune, folosirea NF
este nedefinită cu excepția cazului în care a getline funcția fără a a fost argumentul este executat
anterior. În interiorul unui Sfârşit acțiune, NF va păstra valoarea pe care a avut-o pentru ultimul
înregistrarea citită, cu excepția cazului în care o redirecționare ulterioară, getline funcția fără a a fost
argumentul este efectuat înainte de a intra în Sfârşit acţiune.

NR Numărul ordinal al înregistrării curente de la începutul introducerii. În interiorul a
ÎNCEPE acțiune, valoarea va fi zero. În interiorul unui Sfârşit acțiune valoarea va fi
numărul ultimei înregistrări procesate.

OFMT printf format pentru conversia numerelor în șiruri în instrucțiunile de ieșire (vezi
producție Declaratii); „%.6g” în mod implicit. Rezultatul conversiei este
nespecificat dacă valoarea de OFMT nu este o specificație de format în virgulă mobilă.

FSO imprima separator de câmpuri de ieșire a declarației; în mod implicit.

SRO imprima separator de înregistrare de ieșire a declarației; A în mod implicit.

LUNGIME Lungimea șirului potrivită de Meci Funcția.

RS Primul caracter al valorii șirului de RS va fi înregistrarea de intrare
separator; A în mod implicit. Dacă RS conține mai mult de un caracter, the
rezultatele sunt nespecificate. Dacă RS este nulă, atunci înregistrările sunt separate prin secvențe
format dintr-un plus una sau mai multe linii goale, înainte sau final
liniile goale nu vor avea ca rezultat înregistrări goale la începutul sau la sfârșitul
intrare și a va fi întotdeauna un separator de câmp, indiferent de ce
Valoarea FS este.

RSTART Poziția de pornire a șirului potrivită de Meci funcţie, numerotare
de la 1. Aceasta va fi întotdeauna echivalentă cu valoarea returnată a Meci
Funcția.

SUBEP Șirul separator de indice pentru matrice multidimensionale; valoarea implicită
este definit de implementare.

Regulat Expresii
Wow utilitatea va folosi notația extinsă a expresiei regulate (vezi Base
Volumul definițiilor POSIX.1‐2008, Secțiune 9.4, Extins Regulat Expresii) cu excepția faptului că
va permite utilizarea convențiilor în limbajul C pentru a evita caracterele speciale din interior
ERE, așa cum se specifică în tabelul din volumul Definiții de bază din POSIX.1‐2008,
Capitol 5, Fișier Format Notaţie ('\\', '\A', „\b”, „\f”, '\n', „\r”, '\t', „\v”) si
următorul tabel; aceste secvențe de evacuare trebuie recunoscute atât în ​​interior, cât și în exterior
expresii paranteze. Rețineți că înregistrările nu trebuie separate prin personaje şi
constantele șir pot conține personaje, deci chiar și "\n" secvența este valabilă în
Wow ERE-uri. Folosind un caracterul din cadrul unui ERE necesită evadarea arătată în
următorul tabel.

Tabel 4-2: Evadare secvenţele in Wow

┌─────────┬────────────────────────────────────┬── ───────────────────────────────────
Evadare │ │ │
SecvenţăDescriereSens
├─────────┼────────────────────────────────────┼── ───────────────────────────────────
│\" │ │ caracterul │
├─────────┼────────────────────────────────────┼── ───────────────────────────────────
│\/ │ │ caracterul │
├─────────┼────────────────────────────────────┼── ───────────────────────────────────
│\ddd │ A caracter urmat │ Caracterul a cărui codificare este │
│ │ prin cea mai lungă secvență de unu, │ reprezentată de unul, doi sau │
│ │ două sau trei cifre octale │ număr întreg octal de trei cifre. Multi- │
│ │ caractere (01234567). Dacă toate caracterele de │ octeți necesită mai mulți, │
│ │ cifrele sunt 0 (adică │ secvențe de evadare concatenate ale │
│ │ reprezentarea NUL │ acest tip, inclusiv liderul │
│ │ caracter), comportamentul este │ pentru fiecare octet. │
│ │ nedefinit. │ │
├─────────┼────────────────────────────────────┼── ───────────────────────────────────
│\c │ A caracter urmat │ Nedefinit │
│ │ de către orice caracter nedescris în │ │
│ │ acest tabel sau în tabelul din │ │
│ │ Volumul definițiilor de bază de │ │
│ │ POSIX.1‐2008, Capitol 5, Fișier │ │
│ │ Format Notaţie ('\\', '\A', „\b”, │ │
│ │ „\f”, '\n', „\r”, '\t', „\v”). │ │
└─────────┴────────────────────────────────────┴── ───────────────────────────────────
O expresie regulată poate fi corelată cu un anumit câmp sau șir folosind unul dintre
doi operatori de potrivire a expresiilor regulate, '~' și "!~". Acești operatori vor interpreta
operandul lor din dreapta ca expresie regulată și operandul din partea stângă ca șir.
Dacă expresia regulată se potrivește cu șirul, '~' expresia se evaluează la o valoare
din 1, iar cel "!~" expresia va fi evaluată la o valoare de 0. (Expresia regulată
operațiunea de potrivire este definită de termenul potrivit în volumul Definiții de bază al
POSIX.1‐2008, Secțiune 9.1, Regulat Expresie Definiții, unde apare o potrivire pe oricare
parte a șirului, cu excepția cazului în care expresia regulată este limitată cu sau
caractere speciale.) Dacă expresia regulată nu se potrivește cu șirul,
il '~' expresia va fi evaluată la o valoare de 0 și "!~" expresia va evalua
la o valoare de 1. Dacă operandul din dreapta este orice expresie în afară de simbolul lexical
TIMP, valoarea șirului expresiei va fi interpretată ca un regulat extins
expresie, inclusiv convențiile de evadare descrise mai sus. Rețineți că aceleași evadare
convențiile vor fi aplicate și la determinarea valorii unui șir literal (the
simbol lexical STRING), și astfel va fi aplicat a doua oară când este un literal șir
folosit în acest context.

Când un TIMP token apare ca o expresie în orice context, altul decât ca mâna dreaptă a
il '~' or "!~" operator sau ca unul dintre argumentele funcției încorporate descrise mai jos, the
valoarea expresiei rezultate va fi echivalenta cu:

$0 " " /mai înainte/

mai înainte argument la gsub, Meci, sub funcții, iar fs argument la împărţi
funcție (vezi Şir funcţii) vor fi interpretate ca expresii regulate extinse.
Acestea pot fi fie TIMP jetoane sau expresii arbitrare și vor fi interpretate în
în același mod ca în partea dreaptă a '~' or "!~" operator.

O expresie regulată extinsă poate fi utilizată pentru a separa câmpuri prin alocarea unui șir
conţinând expresia variabilei încorporate FS, fie direct, fie ca o consecință
a utilizării −F sepstring opțiune. Valoarea implicită a FS variabila va fi o singură
. Următorul descrie FS comportament:

1. Dacă FS este un șir nul, comportamentul este nespecificat.

2. Dacă FS este un singur caracter:

A. Dacă FS este , săriți înainte și final și personaje;
câmpurile vor fi delimitate de seturi de unul sau mai multe sau personaje.

b. Altfel, dacă FS este orice alt personaj c, câmpurile vor fi delimitate de fiecare
o singură apariție a c.

3. În caz contrar, valoarea șirului de FS va fi considerat a fi un regulat extins
expresie. Fiecare apariție a unei secvențe care se potrivește cu expresia regulată extinsă
vor delimita câmpuri.

Cu excepția cazului '~' și "!~" operatori, iar în gsub, Meci, împărţi și sub construit-in
funcții, potrivirea ERE se va baza pe înregistrările de intrare; adică separator de înregistrări
caractere (primul caracter al valorii variabilei RS, în mod implicit)
nu poate fi încorporat în expresie și nicio expresie nu trebuie să se potrivească cu separatorul de înregistrare
caracter. Dacă separatorul de înregistrări nu este , personaje încorporate în
expresia poate fi potrivită. Pentru '~' și "!~" operatori, iar în cele patru încorporate
funcții, potrivirea ERE se va baza pe șiruri de text; adică orice personaj (inclusiv
și separatorul de înregistrări) pot fi încorporate în model și un adecvat
modelul trebuie să se potrivească cu orice caracter. Cu toate acestea, în toate Wow Potrivirea ERE, utilizarea unuia sau
mai multe caractere NUL în model, înregistrarea de intrare sau șirul de text produc nedefinit
rezultate.

Modele
A model este orice valabil expresie, un interval specificat de două expresii separate prin a
virgulă sau unul dintre cele două modele speciale ÎNCEPE or Sfârşit.

Special Modele
Wow utilitatea trebuie să recunoască două modele speciale, ÎNCEPE și Sfârşit. Fiecare ÎNCEPE model
se potrivește o singură dată și acțiunea asociată acesteia este executată înainte de prima înregistrare a intrării
se citește — cu excepția posibilă a utilizării getline funcție (vezi Intrare ieșire și General
funcţii) într-un anterior ÎNCEPE acțiune — și înainte ca atribuirea liniei de comandă să fie finalizată. Fiecare Sfârşit
modelul se potrivește o dată și acțiunea asociată acestuia este executată după ultima înregistrare a
intrarea a fost citită. Aceste două modele trebuie să aibă acțiuni asociate.

ÎNCEPE și Sfârşit nu se combină cu alte modele. Multiplu ÎNCEPE și Sfârşit modele trebuie
fie permisă. Acțiunile asociate cu ÎNCEPE modelele vor fi executate în ordine
specificate în program, la fel ca și Sfârşit actiuni. Un Sfârşit modelul poate precede a ÎNCEPE
model într-un program.

Daca un Wow programul constă numai din acțiuni cu modelul ÎNCEPE, Şi ÎNCEPE acțiune
conține nr getline funcţie, Wow va ieși fără să-și citească intrarea când este ultima
declarație în ultimul ÎNCEPE acțiunea este executată. Daca un Wow programul constă numai din acțiuni
cu modelul Sfârşit sau numai acțiuni cu tiparele ÎNCEPE și Sfârşit, intrarea va fi
citiți înainte de declarațiile din Sfârşit acțiunile sunt executate.

Expresie Modele
Un model de expresie va fi evaluat ca și cum ar fi o expresie într-un context boolean.
Dacă rezultatul este adevărat, se consideră că modelul se potrivește și acțiunea asociată
(dacă există) va fi executat. Dacă rezultatul este fals, acțiunea nu va fi executată.

Model Ranges
Un interval de modele este format din două expresii separate prin virgulă; în acest caz, acţiunea
va fi efectuată pentru toate înregistrările dintre o potrivire a primei expresii și
următoarea potrivire a celei de-a doua expresii, inclusiv. În acest moment, intervalul de modele poate
fi repetat începând de la înregistrările de intrare după sfârșitul intervalului de potrivire.

Acţiuni
O acțiune este o secvență de enunțuri așa cum se arată în gramatica în Gramatică. Orice singur
declarația poate fi înlocuită cu o listă de instrucțiuni închisă între acolade. Aplicația
se asigură că declarațiile dintr-o listă de declarații sunt separate prin sau
personaje. Declarațiile dintr-o listă de instrucțiuni vor fi executate secvenţial în ordine
că apar.

expresie acţionând ca condiţional într-o if declarația trebuie evaluată și dacă aceasta
este diferit de zero sau nul, se va executa următoarea instrucțiune; altfel, dacă altfel is
prezent, declarația care urmează altfel va fi executat.

if, în timp ce, do...în timp ce, pentru, rupe și continua declarațiile se bazează pe ISO C
standard (vezi Secțiune 1.1.2, concepte Derivat din il ISO C Standard), cu excepția faptului că
Expresiile booleene vor fi tratate așa cum este descris în Expresii in Wow, și cu excepția în
caz de:

pentru (variabil in mulțime)

care va repeta, atribuindu-i fiecare index of mulțime la variabil într-o ordine nespecificată.
Rezultatele adăugării de noi elemente la mulțime în cadrul unui astfel de pentru bucla sunt nedefinite. În cazul în care un
rupe or continua instrucțiunea apare în afara unei bucle, comportamentul este nedefinit.

șterge instrucțiunea va elimina un element individual de matrice. Astfel, următorul cod
șterge o întreagă matrice:

pentru (index in matrice)
șterge matrice[index]

următor declarația va determina toate procesările ulterioare ale înregistrării curente de intrare
abandonat. Comportamentul este nedefinit dacă a următor declarația apare sau este invocată într-un ÎNCEPE
or Sfârşit acţiune.

ieşire declarația va invoca pe toate Sfârşit acțiunile în ordinea în care apar în
sursa programului și apoi încheiați programul fără a citi alte intrări. Un ieşire
declarație în interiorul unui Sfârşit acțiunea va încheia programul fără o execuție ulterioară a
Sfârşit actiuni. Dacă o expresie este specificată într-un ieşire declarație, valoarea sa numerică trebuie
fi starea de ieșire a Wow, cu excepția cazului în care sunt întâlnite erori ulterioare sau ulterioare ieşire
instrucțiunea cu o expresie este executată.

producție Declaratii
Ambele imprima și printf instrucțiunile vor scrie implicit la ieșirea standard. Ieșirea
vor fi scrise la locația specificată de redirecționare_ieșire dacă se furnizează unul, ca
urmează:

> expresie
>> expresie
| expresie

În toate cazurile, expresie va fi evaluat pentru a produce un șir care este utilizat ca a
calea în care să scrieți (pentru '>' or ">>") sau ca o comandă de executat (pentru '|').
Folosind primele două forme, dacă fișierul cu acel nume nu este deschis în prezent, va fi
deschis, creându-l dacă este necesar și folosind primul formular, trunchiind fișierul. Ieșirea
apoi se anexează la dosar. Atâta timp cât fișierul rămâne deschis, apelurile ulterioare
care expresie evaluează la aceeași valoare șir va adăuga pur și simplu ieșirea la
fişier. Fișierul rămâne deschis până la închide funcție (vezi Intrare ieșire și General
funcţii) este apelată cu o expresie care evaluează la aceeași valoare șir.

A treia formă va scrie ieșirea într-un flux transmis la intrarea unei comenzi. The
fluxul va fi creat dacă niciun flux nu este deschis în prezent cu valoarea de expresie ca a lui
numele comenzii. Fluxul creat va fi echivalent cu unul creat printr-un apel către
popen() funcție definită în volumul System Interfaces din POSIX.1‐2008 cu valoarea de
expresie ca comandă argument şi o valoare de w ca mod argument. Atâta timp cât
fluxul rămâne deschis, apelurile ulterioare în care expresie evaluează la același șir
value va scrie ieșirea în fluxul existent. Pârâul va rămâne deschis până la
închide funcție (vezi Intrare ieșire și General funcţii) se numește cu o expresie care
evaluează la aceeași valoare șir. În acel moment, pârâul va fi închis ca și cum de a
apel la pclose() funcție definită în volumul System Interfaces din POSIX.1‐2008.

După cum este descris în detaliu de gramatica din Gramatică, aceste declarații de ieșire trebuie să ia a
-listă separată de expresies la care se face referire în gramatică prin non-terminal
simboluri expr_list, print_expr_list, print_expr_list_opt. La această listă se face referire aici
ca expresie listă, iar fiecare membru este denumit un expresie argument.

imprima instrucțiunea va scrie valoarea fiecărui argument expresie pe cea indicată
flux de ieșire separat de separatorul câmpului de ieșire curent (vezi variabila FSO de mai sus),
și terminat de separatorul de înregistrare de ieșire (vezi variabila SRO de mai sus). Toată expresia
argumentele vor fi luate ca șiruri de caractere, fiind convertite dacă este necesar; această conversie va
fi așa cum este descris în Expresii in Wow, cu excepția faptului că printf formatează în OFMT
va fi folosită în locul valorii în CONVFMT. O listă de expresii goală va reprezenta
întreaga înregistrare de intrare ($0).

printf instrucțiunea va produce rezultate bazate pe o notație similară cu Formatul fișierului
Notație folosită pentru a descrie formatele de fișiere în acest volum al POSIX.1‐2008 (a se vedea Base
Volumul definițiilor POSIX.1‐2008, Capitol 5, Fișier Format Notaţie). Ieșirea va fi
produs conform specificațiilor cu primul expresie argument ca șir format și
ulterior expresie argumente ca șirurile de caractere arg1 la argn, inclusiv, cu următoarele
exceptii:

1. format va fi un șir de caractere real și nu o reprezentare grafică.
Prin urmare, nu poate conține poziții de caractere goale. The în format
șir, în orice context, altul decât a pavilion a unei specificații de conversie, trebuie să fie
tratat ca un caracter obișnuit care este copiat în ieșire.

2. Dacă setul de caractere conține a '' și acel personaj apare în format
șir, va fi tratat ca un caracter obișnuit care este copiat în ieșire.

3. scăpa Secvențele începând cu a caracterul va fi tratat ca
secvențe de caractere obișnuite care sunt copiate la ieșire. Rețineți că acestea la fel
secvențele vor fi interpretate lexical prin Wow când apar în șiruri literale,
dar nu vor fi tratate în mod special de către printf afirmație.

4. camp lățime or precizie poate fi specificat ca '*' caracter în loc de cifră
şir. În acest caz, următorul argument din lista de expresii va fi preluat și
valoarea sa numerică luată ca lățime sau precizie a câmpului.

5. Implementarea nu trebuie să precedă sau să urmeze rezultatul din d or u convertire
caractere specificatoare cu caractere nespecificate de format șir.

6. Implementarea nu trebuie să precedă rezultatele din o caracterul de specificare a conversiei
cu zerouri de început nespecificate de format șir.

7. Pentru c caracterul de specificare a conversiei: dacă argumentul are o valoare numerică,
va fi scos caracterul a cărui codificare este acea valoare. Dacă valoarea este zero sau nu este
codificarea oricărui caracter din setul de caractere, comportamentul este nedefinit. Dacă
argumentul nu are o valoare numerică, primul caracter al valorii șirului va avea
fi iesit; dacă șirul nu conține niciun caracter, comportamentul este nedefinit.

8. Pentru fiecare specificație de conversie care consumă un argument, următoarea expresie
argumentul va fi evaluat. Cu excepția c specificatorul de conversie
caracter, valoarea va fi convertită (conform regulilor specificate în
Expresii in Wow) la tipul adecvat pentru specificația de conversie.

9. Dacă există argumente de expresie insuficiente pentru a satisface toată conversia
specificațiile în format șir, comportamentul este nedefinit.

10. Dacă vreo secvență de caractere din format șirul începe cu a '%' caracter, dar are
nu formează o specificație de conversie validă, comportamentul este nespecificat.

Ambele imprima și printf poate scoate cel puțin {LINE_MAX} octeți.

funcţii
Wow limbajul are o varietate de funcții încorporate: aritmetică, șir, intrare/ieșire,
și generală.

Aritmetică funcţii
Funcțiile aritmetice, cu excepția int, se bazează pe standardul ISO C (a se vedea
Secțiune 1.1.2, concepte Derivat din il ISO C Standard). Comportamentul este nedefinit în
cazurile în care standardul ISO C specifică că se returnează o eroare sau că comportamentul este
nedefinit. Deși gramatica (vezi Gramatică) permite ca funcțiile încorporate să apară cu nr
argumente sau paranteze, cu excepția cazului în care argumentul sau parantezele sunt indicate ca opționale în
următoarea listă (prin afișarea lor în cadrul „[]” paranteze), o astfel de utilizare este nedefinită.

atan2(y,x)
Întoarce arctangent de y/x în radiani în intervalul [−π,π].

cos(x) Întoarce cosinusul de x, În cazul în care x este în radiani.

păcat(x) Sinusul de întoarcere al x, În cazul în care x este în radiani.

exp(x) Returnează funcția exponențială a x.

log(x) Returnează logaritmul natural al x.

sqrt(x) Returnează rădăcina pătrată a x.

int(x) Returnează argumentul trunchiat la un număr întreg. Trunchierea va fi spre 0 când
x> 0.

rand() Returnează un număr aleatoriu n, astfel încât 0≤n

srand([expres])
Setați valoarea semințelor pentru rand la expres sau folosiți ora din zi dacă expres este omis.
Valoarea anterioară a semințelor va fi returnată.

Şir funcţii
Funcțiile șir din lista următoare vor fi acceptate. Deși gramatica (vezi
Gramatică) permite ca funcțiile încorporate să apară fără argumente sau paranteze, cu excepția cazului în care
argumentul sau parantezele sunt indicate ca opționale în lista următoare (prin afișarea
ei în cadrul „[]” paranteze), o astfel de utilizare este nedefinită.

gsub(mai înainte, repl[, in])
Comporta-te ca sub (a se vedea mai jos), cu excepția faptului că va înlocui toate aparițiile
expresie regulată (cum ar fi ed substitut global de utilitate) în $0 sau în in
argument, când este specificat.

index(s, t)
Returnează poziția, în caractere, numerotarea de la 1, în șir s unde șir t
apare mai întâi, sau zero dacă nu apare deloc.

lungime[([s])]
Returnează lungimea, în caractere, a argumentului său luat ca șir sau a lui
întreaga înregistrare, $0, dacă nu există niciun argument.

Meci(s, mai înainte)
Returnează poziția, în caractere, numerotarea de la 1, în șir s unde
expresie regulată extinsă mai înainte apare, sau zero dacă nu are loc deloc.
RSTART va fi setat în poziția de pornire (care este aceeași cu cea returnată
valoare), zero dacă nu se găsește nicio potrivire; RLENGTH va fi setat la lungimea
șir potrivit, −1 dacă nu se găsește nicio potrivire.

împărţi(s, a[, fs ])
Împărțiți șirul s în elemente de matrice a[1], a[2], ..., a[n] și întoarce-te n. Toate
elementele matricei vor fi șterse înainte de divizarea. The
separarea se va face cu ERE fs sau cu separatorul de câmp FS if fs is
nu li se acordă. Fiecare element de matrice trebuie să aibă o valoare șir când este creat și, dacă
adecvat, elementul matricei va fi considerat un șir numeric (vezi
Expresii in Wow). Efectul unui șir nul ca valoare a fs is
nespecificat.

sprint(fmt, expres, expres,...)
Formatați expresiile conform printf format dat de fmt și întoarce-te
șirul rezultat.

sub(mai înainte, repl[, in ])
Înlocuiește șirul repl în locul primei instanţe a prelungit
expresie uzuala TIMP în sfoară in și returnează numărul de înlocuiri. Un
('&') care apare în șir repl va fi înlocuit cu șirul
din in care se potrivește cu ERE. Un precedat de a trebuie
fi interpretat ca literal caracter. O apariție a două
consecutiv caracterele vor fi interpretate doar ca un singur literal
caracter. Orice altă apariție a a (de exemplu,
precedând orice alt caracter) va fi tratat ca un literal
caracter. Rețineți că dacă repl este un șir literal (indicativul lexical STRING; vedea
Gramatică), manipularea caracterul apare după orice lexical
prelucrare, inclusiv orice lexical -prelucrarea secvenței de evacuare. Dacă in
este specificat și nu este o valoare l (vezi Expresii in Wow), comportamentul este
nedefinit. Dacă in este omis, Wow va folosi înregistrarea curentă ($0) în locul său.

substr(s, m[, n ])
Întoarceți cel mult n-subşirul de caractere al s care începe de la poziție m,
numerotarea de la 1. Dacă n este omis, sau dacă n specifică mai multe caractere decât sunt
lăsată în șir, lungimea subșirului va fi limitată de lungime
de sfoară s.

pentru a reduce(s)
Returnează un șir bazat pe șir s. Fiecare personaj din s adica majuscule
scrisoare specificată să aibă a pentru a reduce cartografiere de către LC_CTYPE categoria din
localitatea curentă va fi înlocuită în șirul returnat cu litera minusculă
specificate de cartografiere. Alte personaje în s va rămâne neschimbată în
șir returnat.

tupper(s)
Returnează un șir bazat pe șir s. Fiecare personaj din s adica literele mici
scrisoare specificată să aibă a tupper cartografiere de către LC_CTYPE categoria din
localitatea curentă este înlocuită în șirul returnat cu litera majusculă
specificate de cartografiere. Alte personaje în s sunt neschimbate în cele returnate
șir.

Toate funcțiile precedente care iau TIMP ca parametru așteptați un model sau un șir
expresie valoroasă care este o expresie regulată așa cum este definită în Regulat Expresii.

Intrare ieșire și General funcţii
Funcțiile de intrare/ieșire și generale sunt:

închide(expresie)
Închideți fișierul sau conducta deschisă de a imprima or printf declarație sau un apel la
getline cu aceeași valoare șir expresie. Limita numărului de deschise
expresie argumente este definit de implementare. Dacă închiderea a avut succes,
funcția va returna zero; în caz contrar, va reveni diferit de zero.

expresie | getline [a fost]
Citiți o înregistrare a intrării dintr-un flux transmis de la ieșirea unei comenzi. The
fluxul va fi creat dacă niciun flux nu este deschis în prezent cu valoarea de
expresie ca numele său de comandă. Fluxul creat va fi echivalent cu unul
creat printr-un apel către popen() funcţionează cu valoarea de expresie ca
comandă argument şi o valoare de r ca mod argument. Atâta timp cât pârâul
rămâne deschis, apelurile ulterioare în care expresie evaluează la același șir
valoarea va citi înregistrările ulterioare din flux. Pârâul va rămâne
deschis până la închide funcția este apelată cu o expresie care evaluează la
aceeași valoare a șirului. În acel moment, fluxul va fi închis ca printr-un apel către
il pclose() funcția. Dacă a fost este omis, $0 și NF va fi setat; in caz contrar, a fost
va fi setat și, dacă este cazul, va fi considerat un șir numeric (vezi
Expresii in Wow).

getline operatorul poate forma constructe ambigue atunci când există
operatori fără paranteze (inclusiv concatenare) la stânga '|' (către
începutul expresiei care conţine getline). În contextul „$”
operator, '|' se comportă ca și cum ar avea o prioritate mai mică decât „$”. Rezultatul
de evaluare a altor operatori este nespecificat, iar aplicațiile conforme trebuie
parantezați corect toate astfel de utilizări.

getline Setați $0 la următoarea înregistrare de intrare din fișierul de intrare curent. Această formă de
getline va stabili NF, NR și FNR variabile.

getline a fost
Setați variabila a fost la următoarea înregistrare de intrare din fișierul de intrare curent și, dacă
potrivit, a fost va fi considerat un șir numeric (vezi Expresii in Wow).
Această formă de getline va stabili FNR și NR variabile.

getline [a fost] < expresie
Citiți următoarea înregistrare a intrării dintr-un fișier numit. The expresie ar trebui sa fie
evaluat pentru a produce un șir care este folosit ca nume de cale. Dacă dosarul acela
numele nu este deschis în prezent, va fi deschis. Atâta timp cât pârâul rămâne
deschise, apeluri ulterioare în care expresie evaluează la aceeași valoare șir
va citi înregistrările ulterioare din dosar. Dosarul rămâne deschis până la
il închide funcția este apelată cu o expresie care evaluează la același
valoare șir. Dacă a fost este omis, $0 și NF va fi setat; in caz contrar, a fost ar trebui sa fie
set și, dacă este cazul, va fi considerat un șir numeric (vezi
Expresii in Wow).

getline operatorul poate forma constructe ambigue atunci când există
operatori binari fără paranteze (inclusiv concatenare) în dreapta „<”
(până la sfârșitul expresiei care conține getline). Rezultatul
evaluarea unui astfel de construct este nespecificată, iar aplicațiile conforme trebuie
parantezați corect toate astfel de utilizări.

sistem(expresie)
Executați comanda dată de expresie într-o manieră echivalentă cu sistem()
funcția definită în volumul System Interfaces din POSIX.1‐2008 și returnează
starea de ieșire a comenzii.

Toate formele de getline va returna 1 pentru intrarea cu succes, zero pentru sfârșitul fișierului și -1 pentru
o eroare.

În cazul în care șirurile de caractere sunt utilizate ca nume de fișier sau conductă, aplicația trebuie să asigure
că șirurile sunt identice din punct de vedere textual. Terminologia „aceeași valoare șir” implică
acele „șiruri echivalente”, chiar și cele care diferă doar prin personaje, reprezintă
fișiere diferite.

Definit de utilizator funcţii
Wow limba oferă, de asemenea, funcții definite de utilizator. Astfel de funcții pot fi definite ca:

funcţie nume([parametru, ...]) { Declarații }

O funcție poate fi referită oriunde într-un Wow program; în special, utilizarea sa poate
preced definirea acestuia. Sfera unei funcții este globală.

Parametrii funcției, dacă sunt prezenți, pot fi fie scalari, fie matrice; comportamentul este
nedefinit dacă un nume de matrice este transmis ca parametru pe care funcția îl folosește ca scalar sau
dacă o expresie scalară este transmisă ca parametru pe care funcția îl folosește ca matrice.
Parametrii funcției trebuie să fie transmiși după valoare dacă sunt scalari și prin referință dacă numele matricei.

Numărul de parametri din definiția funcției nu trebuie să se potrivească cu numărul de
parametrii din apelul de funcție. Parametrii formali în exces pot fi utilizați ca variabile locale.
Dacă într-un apel de funcție sunt furnizate mai puține argumente decât sunt în definiția funcției,
parametrii suplimentari care sunt utilizați în corpul funcției ca scalari trebuie evaluați la
valoare neinițializată până când sunt inițializate altfel, iar parametrii suplimentari care
sunt utilizate în corpul funcției, deoarece matricele trebuie tratate ca matrice neinițializate, unde
fiecare element evaluează la valoarea neinițializată până când este inițializat altfel.

La invocarea unei funcții, nu poate fi plasat niciun spațiu alb între numele funcției și
paranteza de deschidere. Apelurile de funcții pot fi imbricate și apelurile recursive pot fi efectuate
funcții. La întoarcerea de la orice apel de funcție imbricat sau recursiv, valorile tuturor
parametrii funcției de apelare vor rămâne neschimbați, cu excepția parametrilor matricei trecuți
de referință. The reveni instrucțiunea poate fi folosită pentru a returna o valoare. În cazul în care un reveni declaraţie
apare în afara unei definiții de funcție, comportamentul este nedefinit.

În definiția funcției, caracterele vor fi opționale înainte de deschidere
acolada si dupa acolada de inchidere. Definițiile funcțiilor pot apărea oriunde în program
în cazul în care un model-acţiune perechea este permisa.

Gramatică
Gramatica din această secțiune și convențiile lexicale din secțiunea următoare trebuie
împreună descriu sintaxa pentru Wow programe. Convențiile generale pentru acest stil de
gramatica sunt descrise în Secțiune 1.3, Gramatică Convenții. Un program valid poate fi
reprezentat ca simbol non-terminal program în gramatică. Această sintaxă formală va
să aibă prioritate față de descrierea de sintaxă a textului precedent.

%jeton NUME NUMĂR STRING TIMP
%jeton FUNC_NAME /* Nume a urmat by '(' fără alb spațiu. */

/* Cuvinte cheie */
%token Început Sfârșit
/* „ÎNCEPE” „Sfârșit” */

%token Break Continuare Șterge Face Else
/* 'break' 'continue' 'delete' 'do' 'else' */

%token Ieșire pentru funcție dacă este în
/* „ieșire” „pentru” „funcție” „dacă” „în” */

%token Next Print Printf Return While
/* 'next' 'print' 'printf' 'return' 'in timp ce' */

/* Nume de funcții rezervate */
%token BUILTIN_FUNC_NAME
/* Un token pentru următoarele:
* atan2 cos sin exp log sqrt int rand srand
* lungimea indexului gsub se potrivește split sprintf sub
* sistem de închidere substr
*/
%token GETLINE
/* Diferit din punct de vedere sintactic de alte încorporate. */

/* Jetoane cu două caractere. */
%token ADD_ASSIGN SUB_ASSIGN MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN POW_ASSIGN
/* '+=' '−=' '*=' '/=' '%=' '^=' */

%token OR AND NO_MATCH EQ LE GE NE INCR DECR APPEND
/* '||' '&&' '!~' '==' '<=' '>=' '!=' '++' '−−' '>>' */

/* Jetoane cu un singur caracter. */
%token '{' '}' '(' ')' '[' ']' ',' ';' LINIE NOUĂ
%token '+' '−' '*' '%' '^' '!' '>' '<' '|' '?' ':' ' " " ' '$' '='

%porniți programul
%%

program: item_list
| listă_articole_fără acțiune
;

item_list: newline_opt
| actionless_item_list element terminator
| item_list item terminator
| item_list terminator de acțiune
;

actionless_item_list : terminator de model listă_de_articole
| Terminator de model listă_de_articole fără acțiune
;

item : acțiune de tipar
| Funcția NAME '(' param_list_opt ')'
acțiune newline_opt
| Funcția FUNC_NAME '(' param_list_opt ')'
acțiune newline_opt
;

param_list_opt : /* gol */
| lista_param
;

lista_param.: NAME
| lista_param. „,” NAME
;

model: Începe
| Sfârșit
| expr
| expr ',' newline_opt expr
;

acțiune: „{” newline_opt „}”
| „{” newline_opt terminated_statement_list „}”
| „{” newline_opt unterminated_statement_list „}”
;

terminator : terminator ';'
| terminator NEWLINE
| ';'
| LINIE NOUĂ
;

terminated_statement_list : terminated_statement_list
| terminated_statement_list terminated_statement_list
;

unterminated_statement_list : declarație_neterminată
| terminated_statement_list declarație_neterminată
;

terminated_statement : acțiune newline_opt
| Dacă '(' expr ')' newline_opt terminated_statement
| Dacă '(' expr ')' newline_opt terminated_statement
Altfel newline_opt terminated_statement
| În timp ce '(' expr ')' newline_opt terminated_statement
| Pentru '(' simple_statement_opt ';'
expr_opt ';' simple_statement_opt ')' newline_opt
terminated_statement
| Pentru „(” NUME În NUME „)” newline_opt
terminated_statement
| ';' newline_opt
| terminatable_statement NEWLINE newline_opt
| declarație_terminabilă ';' newline_opt
;

declarație_neterminată : declarație_terminabilă
| Dacă '(' expr ')' newline_opt unterminated_statement
| Dacă '(' expr ')' newline_opt terminated_statement
Altfel newline_opt unterminated_statement
| În timp ce '(' expr ')' newline_opt unterminated_statement
| Pentru '(' simple_statement_opt ';'
expr_opt ';' simple_statement_opt ')' newline_opt
declarație_neterminată
| Pentru „(” NUME În NUME „)” newline_opt
declarație_neterminată
;

terminatable_statement : declarație_simple
| Pauză
| Continua
| Următorul
| Ieșiți din expr_opt
| Returnează expr_opt
| Do newline_opt terminated_statement While '(' expr ')'
;

simple_statement_opt : /* gol */
| simple_statement
;

simple_statement : Ștergeți NAME '[' expr_list ']'
| expr
| print_statement
;

print_statement : declarație_print_simple
| simple_print_statement output_redirection
;

simple_print_statement : Imprimă print_expr_list_opt
| Tipăriți „(” multiple_expr_list „)”
| Printf print_expr_list
| Printf '(' multiple_expr_list ')'
;

redirecționare_ieșire : '>' expr
| APPEND expr
| '|' expr
;

expr_list_opt : /* gol */
| expr_list
;

expr_list : expr
| listă_expr_multiple
;

multiple_expr_list: expr ',' newline_opt expr
| multiple_expr_list ',' newline_opt expr
;

expr_opt : /* gol */
| expr
;

expr : unary_expr
| non_unary_expr
;

unary_expr : „+” expr
| '-' expr
| unary_expr '^' expr
| unary_expr '*' expr
| unary_expr '/' expr
| unary_expr „%” expr
| unary_expr „+” expr
| unary_expr '−' expr
| expr_unar non_unary_expr
| unary_expr „<” expr
| unary_expr LE expr
| unary_expr NE expr
| unary_expr EQ expr
| unary_expr '>' expr
| unary_expr GE expr
| unary_expr '~' expr
| unary_expr NO_MATCH expr
| unary_expr În NAME
| unary_expr ȘI newline_opt expr
| unary_expr SAU newline_opt expr
| unary_expr '?' expr ':' expr
| funcţie_de_intrare_unară
;

non_unary_expr : „(' expr ')'
| '!' expr
| non_unary_expr '^' expr
| non_unary_expr „*” expr
| non_unary_expr '/' expr
| non_unary_expr „%” expr
| non_unary_expr „+” expr
| non_unary_expr '−' expr
| non_unary_expr non_unary_expr
| non_unary_expr „<” expr
| non_unary_expr LE expr
| non_unary_expr NE expr
| non_unary_expr EQ expr
| non_unary_expr '>' expr
| non_unary_expr GE expr
| non_unary_expr '~' expr
| non_unary_expr NO_MATCH expr
| non_unary_expr În NAME
| „(” multiple_expr_list “)” În NAME
| non_unary_expr ȘI newline_opt expr
| non_unary_expr SAU newline_opt expr
| non_unary_expr '?' expr ':' expr
| NUMĂR
| ŞIR
| lvaloarea
| ERE
| lvaloarea INCR
| lvaloare DECR
| Valoarea l INCR
| DECR lvaloare
| lvalue POW_ASSIGN expr
| lvalue MOD_ASSIGN expr
| lvalue MUL_ASSIGN expr
| lvalue DIV_ASSIGN expr
| lvalue ADD_ASSIGN expr
| lvaloarea SUB_ASSIGN expr
| lvalue '=' expr
| FUNC_NAME „(” expr_list_opt „)”
/* nu sunt permise spații albe înainte de „(” */
| BUILTIN_FUNC_NAME '(' expr_list_opt ')'
| BUILTIN_FUNC_NAME
| non_unary_input_function
;

print_expr_list_opt : /* gol */
| print_expr_list
;

print_expr_list : print_expr
| print_expr_list ',' newline_opt print_expr
;

print_expr : unary_print_expr
| non_unary_print_expr
;

unary_print_expr : „+” print_expr
| '-' print_expr
| unary_print_expr '^' print_expr
| unary_print_expr '*' print_expr
| unary_print_expr '/' print_expr
| unary_print_expr '%' print_expr
| unary_print_expr „+” print_expr
| unary_print_expr '−' print_expr
| unary_print_expr non_unary_print_expr
| unary_print_expr '~' print_expr
| unary_print_expr NO_MATCH print_expr
| unary_print_expr În NAME
| unary_print_expr ȘI newline_opt print_expr
| unary_print_expr SAU newline_opt print_expr
| unary_print_expr '?' print_expr ':' print_expr
;

non_unary_print_expr : '(' expr ')'
| '!' print_expr
| non_unary_print_expr '^' print_expr
| non_unary_print_expr '*' print_expr
| non_unary_print_expr '/' print_expr
| non_unary_print_expr '%' print_expr
| non_unary_print_expr „+” print_expr
| non_unary_print_expr '−' print_expr
| non_unary_print_expr non_unary_print_expr
| non_unary_print_expr '~' print_expr
| non_unary_print_expr NO_MATCH print_expr
| non_unary_print_expr În NAME
| „(” multiple_expr_list “)” În NAME
| non_unary_print_expr ȘI newline_opt print_expr
| non_unary_print_expr SAU newline_opt print_expr
| non_unary_print_expr '?' print_expr ':' print_expr
| NUMĂR
| ŞIR
| lvaloarea
| ERE
| lvaloarea INCR
| lvaloare DECR
| Valoarea l INCR
| DECR lvaloare
| lvalue POW_ASSIGN print_expr
| lvalue MOD_ASSIGN print_expr
| lvalue MUL_ASSIGN print_expr
| lvalue DIV_ASSIGN print_expr
| lvalue ADD_ASSIGN print_expr
| lvalue SUB_ASSIGN print_expr
| lvalue '=' print_expr
| FUNC_NAME „(” expr_list_opt „)”
/* nu sunt permise spații albe înainte de „(” */
| BUILTIN_FUNC_NAME '(' expr_list_opt ')'
| BUILTIN_FUNC_NAME
;

lvalue : NUME
| NUME „[” expr_list „]”
| „$” expr
;

non_unary_input_function : simple_get
| simple_get '<' expr
| non_unary_expr '|' simple_get
;

unary_input_function : unary_expr '|' simple_get
;

simple_get : GETLINE
| GETLINE lvaloare
;

newline_opt : /* gol */
| newline_opt NEWLINE
;

Această gramatică are mai multe ambiguități care vor fi rezolvate după cum urmează:

* Precedența operatorului și asociativitatea vor fi așa cum sunt descrise în Tabel 4-1, Expresii
in In scadere Precedenta in Wow.

* În caz de ambiguitate, an altfel se asociază cu cea mai imediat precedentă
if care ar satisface gramatica.

* În unele contexte, a („/”) care este folosit pentru a înconjura un ERE ar putea fi, de asemenea,
operator de divizie. Acest lucru va fi rezolvat în așa fel încât oriunde este împărțirea
operator ar putea apărea, a se presupune a fi operatorul de diviziune. (Nu este
operator de diviziune unară.)

Fiecare expresie într-o Wow programul trebuie să respecte regulile de precedență și asociativitate,
chiar și atunci când acest lucru nu este necesar pentru a rezolva o ambiguitate. De exemplu, pentru că „$” are mai mare
precedenţă decât „++”, șirul „$x++−−” nu este valabil Wow expresie, chiar dacă este
analizat fără ambiguitate de gramatică ca „$(x++)−−”.

O convenție care ar putea să nu fie evidentă din gramatica formală este unde
caracterele sunt acceptabile. Există mai multe plasări evidente, cum ar fi terminarea a
declarație și a poate fi folosit pentru a scăpa caractere între oricare
jetoane lexicale. În plus, personaje fără personajele pot
urmați o virgulă, o acoladă deschisă, operator logic și („&&”), operator logic SAU ("||"),
il do cuvânt cheie, altfel cuvânt cheie și paranteza de închidere a unui if, pentru, în timp ce
afirmație. De exemplu:

{ imprima $ 1,
$2 }

Lexical Convenții
Convenţiile lexicale pentru Wow programele, în raport cu gramatica precedentă, vor fi
după cum urmează:

1. Cu excepția cazurilor menționate, Wow va recunoaște cel mai lung simbol sau început delimitator posibil
la un punct dat.

2. Un comentariu constă din orice caractere care încep cu caracter
și încheiat de, dar excluzând următoarea apariție a, a . Comentariile trebuie
nu au niciun efect, cu excepția delimitării jetoanelor lexicale.

3. Cel va fi recunoscut ca simbol LINIE NOUĂ.

4. A caracter urmat imediat de a nu va avea efect.

5. Jetonul STRING va reprezenta o constantă șir. O constantă șir va începe cu
caracterul '"'. În cadrul unei constante de șir, a caracterul va fi
considerată a începe o secvență de evadare așa cum este specificat în tabelul din bază
Volumul definițiilor POSIX.1‐2008, Capitol 5, Fișier Format Notaţie ('\\', '\A', „\b”,
„\f”, '\n', „\r”, '\t', „\v”). În plus, secvențele de evadare în Tabel 4-2, Evadare
secvenţele in Wow vor fi recunoscute. A nu trebuie să apară într-un șir
constant. O constantă șir va fi terminată prin prima apariție fără escape a
caracterul '"' după cea care începe constanta coardei. Valoarea
șirul de caractere va fi secvența tuturor caracterelor fără escape și a valorilor de escape
secvențe între, dar fără a include, cele două delimitări '"' caractere.

6. Jetonul TIMP reprezintă o constantă extinsă a expresiei regulate. O constantă ERE
va începe cu caracter. În cadrul unei constante ERE, a
caracterul va fi considerat a începe o secvență de evadare așa cum este specificat în tabelul din
volumul Definiții de bază din POSIX.1-2008, Capitol 5, Fișier Format Notaţie. În
în plus, secvențele de evadare în Tabel 4-2, Evadare secvenţele in Wow ar trebui sa fie
recunoscut. Cererea trebuie să asigure că a nu apare în cadrul unui ERE
constant. O constantă ERE va fi terminată prin prima apariție fără evadare a
caracter după cel care începe constanta ERE. Regularul extins
expresia reprezentată de constanta ERE va fi succesiunea tuturor fără escape
caracterele și valorile secvențelor de evadare între cele două, dar fără a le include
delimitând personaje.

7. A nu va avea efect, cu excepția delimitării jetoanelor lexicale sau în interior STRING or
TIMP token-uri.

8. Jetonul NUMĂR va reprezenta o constantă numerică. Forma și valoarea sa numerică trebuie
fie echivalent cu zecimal-flotante-constant simbol conform specificațiilor ISO C
standard, sau va fi o secvență de cifre zecimale și va fi evaluată ca un
constantă întreagă în zecimală. În plus, implementările pot accepta constante numerice
cu forma și valoarea numerică echivalente cu hexazecimal-constantă și
hexazecimal-flotante-constant jetoane așa cum este specificat de standardul ISO C.

Dacă valoarea este prea mare sau prea mică pentru a fi reprezentabilă (vezi Secțiune 1.1.2,
concepte Derivat din il ISO C Standard), comportamentul este nedefinit.

9. O secvență de caractere de subliniere, cifre și alfabete din setul de caractere portabil
(a se vedea volumul Definiții de bază din POSIX.1‐2008, Secțiune 6.1, Portabil Caracter
set), începând cu un sau caracter alfabetic, va fi considerat a
cuvânt.

10. Următoarele cuvinte sunt cuvinte cheie care vor fi recunoscute ca simboluri individuale; cel
numele simbolului este același cu cuvântul cheie:

ÎNCEPE șterge Sfârşit funcţie in printf
rupe do ieşire getline următor reveni
continua altfel pentru if imprima în timp ce

11. Următoarele cuvinte sunt nume ale funcțiilor încorporate și trebuie recunoscute ca
semn BUILTIN_FUNC_NAME:

atan2 gsub log împărţi sub tupper
închide index Meci sprint substr
cos int rand sqrt sistem
exp lungime păcat srand pentru a reduce

Cuvintele cheie enumerate mai sus și numele funcțiilor încorporate sunt considerate rezervate
cuvinte.

12. Jetonul NUME va consta dintr-un cuvânt care nu este un cuvânt cheie sau un nume al unui încorporat
funcția și nu este urmată imediat (fără delimitatori) de '('
caracter.

13. Jetonul FUNC_NAME va consta dintr-un cuvânt care nu este un cuvânt cheie sau un nume de a
funcția încorporată, urmată imediat (fără delimitatori) de '(' caracter.
'(' caracterul nu va fi inclus ca parte a jetonului.

14. Următoarele secvențe de două caractere vor fi recunoscute ca jetoane numite:

┌───────────┬──────────┬────────────────────────
Simbol NumeSecvenţăSimbol NumeSecvenţă
├───────────┼──────────┼──────────────────────────────
ADD_ASSIGN │ += │ NU SE POTRIVESC │ !~ │
SUB_ASSIGN │ −= │ EQ │ == │
MUL_ASSIGN │ *= │ LE │ <= │
DIV_ASSIGN │ /= │ GE │ >= │
MOD_ASSIGN │ %= │ NE │ != │
POW_ASSIGN │ ^= │ INCR │ ++ │
OR │ || │ DECR │ −− │
AND │ && │ ADĂUGA │ >> │
└───────────┴──────────┴──────────────────────────────
15. Următoarele caractere unice vor fi recunoscute ca jetoane ale căror nume sunt
caracter:

{ } ( ) [ ] , ; + - * % ^ ! > < | ? : " " $ =

Există o ambiguitate lexicală între simbol TIMP și jetoanele „/” și DIV_ASSIGN.
Când o secvență de intrare începe cu a caracter în orice context sintactic în care
semn „/” or DIV_ASSIGN ar putea apărea ca următorul simbol într-un program valid, cu cât este mai lung
acele două jetoane care pot fi recunoscute vor fi recunoscute. În orice altă sintactică
contextul în care simbolul TIMP ar putea apărea ca următorul simbol într-un program valid, simbolul
TIMP vor fi recunoscute.

EXIT STAREA


Următoarele valori de ieșire vor fi returnate:

0 Toate fișierele de intrare au fost procesate cu succes.

>0 A apărut o eroare.

Starea de ieșire poate fi modificată în cadrul programului utilizând un ieşire expresie.

CONSECINȚE OF ERORI


Dacă există fişier operandul este specificat și fișierul numit nu poate fi accesat, Wow va scrie a
mesaj de diagnosticare la eroare standard și se încheie fără nicio acțiune suplimentară.

Dacă programul specificat fie de către program operand sau a profil operand nu este a
valabil Wow program (după cum este specificat în secțiunea DESCRIERE EXTINSĂ), comportamentul este
nedefinit.

următor secțiuni sunt informativ.

APLICARE UTILIZARE


index, lungime, Meci și substr funcțiile nu trebuie confundate cu similare
funcții în standardul ISO C; cel Wow versiunile se ocupă de caractere, în timp ce ISO C
standard se ocupă de octeți.

Deoarece operația de concatenare este reprezentată mai degrabă de expresii adiacente decât de un
operator explicit, este adesea necesar să folosiți paranteze pentru a impune corect
prioritate de evaluare.

EXEMPLE


Wow programul specificat în linia de comandă este cel mai ușor specificat într-un singur
ghilimele (de exemplu, 'program') pentru aplicațiile care utilizează sh, Deoarece Wow programe în mod obișnuit
conțin caractere care sunt speciale pentru shell, inclusiv ghilimele duble. In cazurile
unde un Wow programul conține caractere cu ghilimele simple, de obicei este cel mai ușor de specificat
cea mai mare parte a programului ca șiruri de caractere între ghilimele simple concatenate de shell cu ghilimele
caractere cu ghilimele simple. De exemplu:

Wow '/'\''/ { imprima "citat:", $0 }'

tipărește toate liniile de la intrarea standard care conțin un caracter cu ghilimele simple, prefixate
implementate cu cita:.

Următoarele sunt exemple simple Wow programe:

1. Scrieți la ieșirea standard toate liniile de intrare pentru care câmpul 3 este mai mare decât 5:

$3 > 5

2. Scrie fiecare al zecelea rând:

(NR % 10) == 0

3. Scrieți orice linie cu un subșir care se potrivește cu expresia regulată:

/(G|D)(2[0−9][[:alpha:]]*)/

4. Tipăriți orice linie cu un subșir care conține a „G” or „D”, urmată de o secvență de
cifre și caractere. Acest exemplu folosește clase de caractere cifră și alfa pentru a se potrivi
cifre independente de limbă și, respectiv, caractere alfabetice:

/(G|D)([[:cifra:][:alpha:]]*)/

5. Scrieți orice rând în care al doilea câmp se potrivește cu expresia regulată și cu al patrulea
câmpul nu:

$2 " " /xyz/ && $4 ! " " /xyz/

6. Scrieți orice rând în care al doilea câmp conține a :

$2 " " /\\/

7. Scrieți orice rând în care al doilea câmp conține a . Rețineți că
-evadarile sunt interpretate de doua ori; odată în procesarea lexicală a şirului
și o dată la procesarea expresiei regulate:

$2 " " "\\\\"

8. Scrieți al doilea până la ultimul și ultimul câmp din fiecare rând. Separați câmpurile prin a
:

{OFS=":";tipărește $(NF−1), $NF}

9. Scrieți numărul rândului și numărul de câmpuri din fiecare rând. Cele trei corzi
reprezentând numărul liniei, the , iar numărul de câmpuri sunt concatenate
și acel șir este scris la ieșirea standard:

{imprimare NR „“ NF}

10. Scrieți rânduri mai lungi de 72 de caractere:

lungime ($0) > 72

11. Scrieți primele două câmpuri în ordine inversă, separate prin FSO:

{ imprima $ 2, $1 }

12. La fel, cu câmpurile de intrare separate prin a sau și personaje, sau
ambii:

ÎNCEPE { FS = ",[ \t]*|[ \t]+" }
{ imprima $ 2, $1 }

13. Adunați prima coloană, imprimați suma și media:

{s += $1 }
Sfârşit {imprimare "sumă is ", s, " in medie este", s/NR}

14. Scrieți câmpurile în ordine inversă, câte unul pe linie (mai multe rânduri pentru fiecare linie înscrisă):

{ pentru (i = NF; i > 0; −−i) imprima $i }

15. Scrieți toate liniile dintre aparițiile șirurilor Începe și opri:

/start/, /Stop/

16. Scrieți toate rândurile al căror prim câmp este diferit de cel precedent:

$1 != precedentă { imprimare; precedentă = $1 }

17. Simulați ecou:

ÎNCEPE {
pentru (i = 1; i < ARGC; ++i)
printf("%s%s", ARGV[i], i==ARGC−1?"\n":" ")
}

18. Scrieți prefixele de cale conținute în PATH variabilă de mediu, una pe linie:

ÎNCEPE {
n = împărţi (ENVIRON[„CALEA”], cale, ":")
pentru (i = 1; i <= n; ++i)
imprima cale[i]
}

19. Dacă există un fișier numit intrare care conțin anteturi de pagină cu formularul: Pagina #

și un fișier numit program care contine:

/Pagină/ { $2 = n++; }
{ imprima }

apoi linia de comandă:

Wow −f program n = 5 intrare

tipărește fișierul intrare, completând numerele de pagină începând cu 5.

FUNDAMENTARE


Această descriere se bazează pe noul Wow, ``nawk'', (a se vedea documentul de referință AWK
Programare Limbă), care a introdus o serie de noi caracteristici istoricului Wow:

1. Cuvinte cheie noi: șterge, do, funcţie, reveni

2. Noi funcții încorporate: atan2, închide, cos, gsub, Meci, rand, păcat, srand, sub, sistem

3. Noi variabile predefinite: FNR, ARGC, ARGV, RSTART, LUNGIME, SUBEP

4. Noi operatori de expresie: ?, :, ,, ^

5. FS variabilă și al treilea argument la împărţi, acum tratat ca obișnuit extins
expresii.

6. Prioritatea operatorului, schimbată pentru a se potrivi mai strâns cu limbajul C. Două exemple
de coduri care funcționează diferit sunt:

în timp ce ( n /= 10 > 1) ...
if (!"saptamana" ~ /bwk/) ...

Au fost adăugate mai multe caracteristici pe baza implementărilor mai noi ale Wow:

* Mai multe cazuri de −f profil sunt permise.

* Noua opțiune −v misiune.

* Noua variabilă predefinită MEDIU.

* Noi funcții încorporate tupper și pentru a reduce.

* Se adaugă mai multe capacități de formatare printf pentru a se potrivi cu standardul ISO C.

În general Wow sintaxa a fost întotdeauna bazată pe limbajul C, cu câteva caracteristici de la
limbajul de comandă shell și alte surse. Din această cauză, nu este complet
compatibil cu orice altă limbă, ceea ce a provocat confuzie pentru unii utilizatori. Nu este
intenția dezvoltatorilor standard de a aborda astfel de probleme. Câteva relativ minore
au fost făcute modificări pentru a face limbajul mai compatibil cu standardul ISO C; cel mai
dintre aceste modificări se bazează pe modificări similare din implementările recente, așa cum este descris
de mai sus. Au rămas câteva convenții de limbaj C care nu sunt incluse Wow. Unul dintre
cele notabile este operator, care este folosit în mod obișnuit pentru a specifica multiplu
expresii în limbajul C pentru afirmație. De asemenea, sunt diverse locuri unde Wow is
mai restrictiv decât limbajul C în ceea ce privește tipul de expresie care poate fi folosit în
un context dat. Aceste limitări se datorează diferitelor caracteristici pe care Wow limbă
oferă.

Expresii regulate în Wow au fost extinse oarecum de la implementări istorice la
faceți-le un supraset pur de expresii regulate extinse, așa cum este definit de POSIX.1‐2008 (vezi
volumul Definiții de bază din POSIX.1-2008, Secțiune 9.4, Extins Regulat Expresii).
Principalele extensii sunt caracteristicile de internaționalizare și expresiile de interval. Istoric
implementari ale Wow au susținut de mult -secvente de evacuare ca extensie la
expresii regulate extinse și această extensie a fost păstrată în ciuda inconsecvenței
cu alte utilitati. Numărul de secvențe de evadare recunoscute în ambele regulate extinse
expresiile și șirurile de caractere a variat (în general crescând în timp) între implementări.
Setul specificat de POSIX.1‐2008 include cele mai multe secvențe cunoscute a fi acceptate de popular
implementări și prin standardul ISO C. O secvență care nu este acceptată este
valoarea hexazecimală scapă începând cu '\X'. Acest lucru ar permite valori exprimate în mai multe
mai mult de 9 biți pentru a fi utilizați în interior Wow ca în standardul ISO C. Cu toate acestea, deoarece această sintaxă
are o lungime nedeterministă, nu permite ca caracterul următor să fie a
cifră hexazecimală. Această limitare poate fi rezolvată în limbajul C prin utilizarea lui
concatenarea șirurilor lexicale. În Wow limbaj, concatenarea ar putea fi, de asemenea, o soluție
pentru șiruri, dar nu pentru expresii regulate extinse (fie jetoane lexicale ERE sau
șiruri utilizate dinamic ca expresii regulate). Din cauza acestei limitări, caracteristica
nu a fost adăugat la POSIX.1‐2008.

Când o variabilă șir este utilizată într-un context în care o expresie regulată extinsă este în mod normal
apare (unde se folosește jetonul lexical ERE în gramatică) șirul nu conține
literalul personaje.

Câteva versiuni ale Wow permite forma:

FUNC nume (argumente, ... ) { Declarații }

Acest lucru a fost depreciat de autorii limbii, care au cerut să nu fie
specificat.

Implementări istorice ale Wow produce o eroare dacă a următor instrucțiunea este executată în a
ÎNCEPE acțiune și cauză Wow a înceta dacă a următor instrucțiunea este executată într-un Sfârşit acţiune.
Acest comportament nu a fost documentat și nu sa crezut că este necesar
standardizați-l.

Specificarea conversiilor între șir și valori numerice este mult mai detaliată
decât în ​​documentarea implementărilor istorice sau în cele referite AWK
Programare Limbă. Deși majoritatea comportamentului este conceput pentru a fi intuitiv,
detaliile sunt necesare pentru a asigura un comportament compatibil din diferite implementări. Acest
este deosebit de important în expresiile relaționale deoarece tipurile de operanzi
determinați dacă se efectuează o comparație șir sau numerică. Din perspectiva unui
dezvoltator de aplicații, este de obicei suficient să te aștepți la un comportament intuitiv și să forțezi
conversii (prin adăugarea zero sau concatenarea unui șir nul) când tipul unei expresii
nu se potrivește în mod evident cu ceea ce este necesar. Intenția a fost de a preciza istoricul
practică în aproape toate cazurile. Singura excepție este aceea că, în implementările istorice,
variabilele și constantele mențin atât valorile șir, cât și valorile numerice după valoarea lor inițială
este convertit prin orice utilizare. Aceasta înseamnă că referirea la o variabilă sau constantă poate avea
efecte secundare neașteptate. De exemplu, cu implementări istorice următoarele
program:

{
a = „+2”
b = 2
if (NR % 2)
c = a + b
if (a == b)
imprima "numeric comparaţie"
altfel
imprima "şir comparaţie"
}

ar efectua o comparație numerică (și o comparație numerică de ieșire) pentru fiecare număr impar
linie, dar efectuați o comparație de șiruri (și o comparație de șir de ieșire) pentru fiecare even-
linie numerotata. POSIX.1‐2008 asigură că comparațiile vor fi numerice dacă este necesar. Cu
implementări istorice, următorul program:

ÎNCEPE {
OFMT = „%e”
imprima 3.14
OFMT = „%f”
imprima 3.14
}

ar ieși „3.140000e+00” de două ori, pentru că în a doua imprima enunț constanta
"3.14" ar avea o valoare șir din conversia anterioară. POSIX.1‐2008 cere ca
ieșirea celui de-al doilea imprima declarație fie "3.140000". Comportamentul istoric
implementările au fost văzute ca fiind prea neintuitive și imprevizibile.

S-a subliniat că, cu regulile conținute în primele proiecte, următorul scenariu
nu ar tipari nimic:

ÎNCEPE {
y[1.5] = 1
OFMT = „%e”
imprima y[1.5]
}

Prin urmare, o nouă variabilă, CONVFMT, a fost introdus. The OFMT variabila este acum limitată la
afectând conversiile de ieşire ale numerelor în şiruri de caractere şi CONVFMT este folosit pentru intern
conversii, cum ar fi comparațiile sau indexarea matricei. Valoarea implicită este aceeași cu aceea
pentru OFMT, deci dacă nu se schimbă un program CONVFMT (ceea ce niciun program istoric nu ar face), ea
va primi comportamentul istoric asociat conversiilor interne de șiruri.

POSIX Wow convenţiile lexicale şi sintactice sunt specificate mai formal decât în ​​altele
surse. Din nou, intenția a fost de a specifica practica istorică. O convenție care poate
să nu fie evident din gramatica formală ca în alte descrieri verbale este unde
caracterele sunt acceptabile. Există mai multe plasări evidente, cum ar fi terminarea a
declarație și a poate fi folosit pentru a scăpa caractere între oricare
jetoane lexicale. În plus, personaje fără personajele pot
urmați o virgulă, o acoladă deschisă, un operator logic și („&&”), un operator logic OR
("||"), do cuvânt cheie, altfel cuvânt cheie și paranteza de închidere a unui if, pentru,
în timp ce afirmație. De exemplu:

{ imprima $ 1,
$2 }

Cerința ca Wow adăugați o urmă textul argumentului programului este să
simplificați gramatica, făcând-o să se potrivească cu un fișier text în formă. Nu există nicio modalitate de a
aplicație sau suită de teste pentru a determina dacă este un literal se adaugă sau dacă Wow
pur și simplu se comportă ca și cum ar fi făcut-o.

POSIX.1‐2008 necesită mai multe modificări față de implementările istorice pentru a putea fi susținute
internaţionalizare. Probabil cea mai subtilă dintre acestea este utilizarea punctului zecimal
caracter, definit de LC_NUMERIC categoria localului, în reprezentări ale
numere în virgulă mobilă. Acest caracter specific local este utilizat în recunoașterea numerelor
intrare, în conversia între șiruri și valori numerice și în formatarea ieșirii.
Cu toate acestea, indiferent de locație, the caracterul (caracterul cu virgulă zecimală al
Localizare POSIX) este caracterul cu virgulă zecimală recunoscut în procesare Wow programe
(inclusiv atribuiri în argumentele liniei de comandă). Aceasta este în esență aceeași convenție
ca cel utilizat în standardul ISO C. Diferența este că limbajul C include
setlocale(), care permite unei aplicații să își modifice localitatea. Din acest motiv
capacitatea, o aplicație C începe să se execute cu localul setat la localul C și numai
se execută în localul specificat de mediu după un apel explicit la setlocale,
Cu toate acestea, adăugarea unei noi caracteristici atât de elaborate la Wow limba a fost văzută ca
nepotrivit pentru POSIX.1‐2008. Este posibil să se execute un Wow program explicit în orice
localul dorit prin setarea mediului în shell.

Comportamentul nedefinit care rezultă din NUL în expresiile regulate extinse permite viitor
extensii pentru GNU bălălău program pentru procesarea datelor binare.

Comportamentul în cazul invalidului Wow programe (inclusiv lexicale, sintactice și
erori semantice) este nedefinită pentru că a fost considerată excesiv de limitativă asupra implementărilor
pentru a specifica. În cele mai multe cazuri, se poate aștepta ca astfel de erori să producă un diagnostic și o non-
stare de ieșire zero. Cu toate acestea, unele implementări pot alege să extindă limbajul în anumite moduri
care folosesc anumite constructe invalide. Alte construcții nevalide pot fi considerate
demn de un avertisment, dar în caz contrar provoacă un comportament rezonabil. Încă alte construcții
poate fi foarte greu de detectat în unele implementări. De asemenea, diferite implementări
ar putea detecta o anumită eroare în timpul unei analize inițiale a programului (înainte de a citi orice
fișiere de intrare), în timp ce alții îl pot detecta atunci când execută programul după ce le citesc
intrare. Implementatorii ar trebui să fie conștienți de faptul că diagnosticarea erorilor cât mai devreme posibil și
producerea de diagnostice utile poate ușura depanarea aplicațiilor și, astfel, poate face un
implementare mai utilizabilă.

Comportamentul nespecificat din utilizarea mai multor caractere RS valorile este de a permite viitorul posibil
extensii bazate pe expresii regulate extinse utilizate pentru separatoarele de înregistrări. Istoric
implementările iau primul caracter al șirului și le ignoră pe celelalte.

Comportament nespecificat când împărţi(şir,mulțime, ) este folosit pentru a permite un viitor propus
extensie care ar împărți un șir într-o matrice de caractere individuale.

În contextul getline funcție, argumente la fel de bune pentru diferite precedențe
a | și < se pot realiza operatori. Practica istorică a fost că:

getline < "A" „b”

este analizat ca:

( getline < "A" ) „b”

deşi mulţi ar susţine că intenţia a fost ca dosarul ab ar trebui citit. In orice caz:

getline < "X" + 1

analizează ca:

getline < ( "X" + 1 )

Probleme similare apar cu | versiune a getline, în special în combinație cu $.
De exemplu:

$"ecou Salut" | getline

(Această situație este deosebit de problematică atunci când este utilizată într-un imprima declarație, unde
|getline partea ar putea fi o redirecționare a imprima.)

Deoarece în majoritatea cazurilor astfel de constructe nu sunt (sau cel puțin nu ar trebui) să fie utilizate (pentru că ele
au o ambiguitate naturală pentru care nu există o analiză convențională), sensul acestora
constructele a fost făcută în mod explicit nespecificat. (Efectul este că o conformare
aplicația care se confruntă cu problema trebuie să intre paranteze pentru a rezolva ambiguitatea.) Acolo
Părea să fie puține, dacă nu există, utilizări reale ale unor astfel de constructe.

Se pot scrie gramatici care ar provoca o eroare în aceste circumstanțe. Unde
compatibilitatea inversă nu este o considerație importantă, implementatorii ar putea dori să folosească astfel
gramaticile.

Unele implementări istorice au permis apelarea unor funcții încorporate fără
o listă de argumente, rezultatul fiind o listă implicită de argumente aleasă în unele „rezonabile”
cale. Utilizarea de lungime ca sinonim pentru lungime ($0) este singura dintre aceste forme care este
considerat a fi larg cunoscut sau utilizat pe scară largă; această formă specială este documentată în diverse
locuri (de exemplu, cele mai istorice Wow paginile de referință, deși nu în cele menționate
AWK Programare Limbă) ca practică legitimă. Cu această excepție, implicit
listele de argumente au fost întotdeauna nedocumentate și definite vag și nu este deloc
clar cum (sau dacă) ar trebui să fie generalizate la funcțiile definite de utilizator. Nu adaugă nimic util
funcționalitate și exclude posibile extensii viitoare care ar putea avea nevoie să numească funcții
fără a-i chema. A nu le standardiza pare cel mai simplu curs. Standardul
dezvoltatorii au considerat că lungime a meritat însă un tratament special, din moment ce a fost
documentat în trecut și poate fi utilizat în mod substanțial în programele istorice.
În consecință, această utilizare a fost legitimată, dar numărul 5 a eliminat învechitul
marcare pentru implementări conforme cu XSI și multe aplicații conforme
depind de această caracteristică.

In sub și gsub, dacă repl este un șir literal (indicativul lexical STRING), apoi doi
consecutiv caracterele ar trebui folosite în șir pentru a asigura un singur
va precede când șirul rezultat este trecut la
funcţie. (De exemplu, pentru a specifica un literal în șirul de înlocuire, folosiți
gsub(TIMP, „\\&”).)

Din punct de vedere istoric, singurul personaj special din repl argument de sub și gsub şir
funcțiile a fost ('&') caracter și precedându-l cu
caracterul a fost folosit pentru a-și dezactiva semnificația specială.

Descrierea din standardul ISO POSIX‐2:1993 a introdus un comportament astfel încât
caracterul era un alt personaj special și nu era specificat dacă există
au fost orice alte personaje speciale. Această descriere a introdus mai multe portabilitate
probleme, dintre care unele sunt descrise mai jos și, prin urmare, a fost înlocuită cu altele
descriere istorică. Unele dintre probleme includ:

* Din punct de vedere istoric, pentru a crea șirul de înlocuire, ar putea folosi un script gsub(TIMP, „\\&”),
dar cu formularea standard ISO POSIX‐2:1993 a fost necesar să se folosească gsub(TIMP,
„\\\\&”). The caracterele sunt dublate aici deoarece toate literalele șir sunt
supuse analizei lexicale, care ar reduce fiecare pereche de personaje la
un singur înainte de a fi trecut la gsub.

* Deoarece nu a fost specificat care sunt caracterele speciale, pentru scripturile portabile
garanta că caracterele sunt tipărite literal, fiecare caracter trebuia precedat
cu . (De exemplu, a trebuit să folosească un script portabil gsub(TIMP, "\\Salut") Pentru a
produce un șir de înlocuire de "Salut".)

Descrierea pentru comparații în standardul ISO POSIX‐2:1993 nu a fost descrisă corespunzător
practică istorică din cauza modului în care șirurile numerice sunt comparate ca numere. The
regulile actuale determină următorul cod:

if (0 == „000”)
imprima "ciudat, dar Adevărat"
altfel
imprima "nu Adevărat"

pentru a face o comparație numerică, determinând if a reusi. Ar trebui să fie intuitiv intuitiv
că acesta este un comportament incorect și, într-adevăr, nicio implementare istorică a Wow de fapt
se comportă astfel.

Pentru a rezolva această problemă, definiția numeric şir a fost îmbunătățită pentru a include numai acelea
valori obţinute din circumstanţe specifice (în mare parte surse externe) unde nu este
este posibil să se determine fără ambiguitate dacă valoarea este destinată să fie un șir sau a
numeric.

Variabilele care sunt alocate unui șir numeric trebuie, de asemenea, tratate ca șir numeric.
(De exemplu, noțiunea de șir numeric poate fi propagată peste alocări.) În
comparații, toate variabilele care au valoarea neinițializată trebuie tratate ca o valoare numerică
operand evaluând la valoarea numerică zero.

Variabilele neinițializate includ toate tipurile de variabile, inclusiv scalari, elemente de matrice,
și câmpuri. Definiția unei valori neinițializate în Variabile și Special Variabile is
necesar pentru a descrie valoarea plasată pe variabilele neinițializate și pe câmpurile care sunt
valabil (de exemplu, < $NF) dar nu au caractere în ele și să descrie cum acestea
variabilele urmează să fie utilizate în comparații. Un câmp valid, cum ar fi $1, care nu are caractere
în ea se poate obţine dintr-o linie de intrare a „\t\t” cand FS='\t'. Din punct de vedere istoric,
comparație (1 USD10) s-a făcut numeric după evaluare $1 la valoarea zero.

Expresia ``... va avea, de asemenea, valoarea numerică a șirului numeric'' a fost eliminată
din mai multe secțiuni ale standardului ISO POSIX‐2:1993, deoarece specifică un inutil
detaliu de implementare. Nu este necesar ca POSIX.1‐2008 să precizeze că aceste obiecte
i se atribuie două valori diferite. Este necesar doar să precizăm că aceste obiecte pot
evaluați la două valori diferite în funcție de context.

Implementări istorice ale Wow nu a analizat numere întregi hexazecimale sau constante flotante
ca "0xa" și "0xap0". Din cauza unei neglijeri, edițiile din 2001 până în 2004 ale acestui
suport standard necesar pentru constantele flotante hexazecimale. Acest lucru s-a datorat
trimitere la atof(). Această versiune a standardului permite, dar nu necesită
implementări de utilizat atof() și include o descriere a modului în care sunt numerele în virgulă mobilă
recunoscută ca o alternativă de potrivire a comportamentului istoric. Intenția acestei schimbări este de a
permite implementărilor să recunoască constantele în virgulă mobilă în funcție de
Standardul ISO/IEC 9899:1990 sau standardul ISO/IEC 9899:1999 și pentru a permite (dar nu solicita)
implementări pentru a recunoaște constantele întregi hexazecimale.

Implementări istorice ale Wow nu a acceptat infinitate în virgulă mobilă și NaN în
numeric siruri; de exemplu, „−INF” și "NaN". Cu toate acestea, implementările care utilizează atof() sau
strtod() funcțiile pentru a face conversia au primit suport pentru aceste valori dacă au folosit a
Versiunea standard ISO/IEC 9899:1999 a funcției în locul unui standard ISO/IEC 9899:1990
versiune. Din cauza unei neglijeri, edițiile din 2001 până în 2004 ale acestui standard nu au făcut-o
permite suport pentru infinitate și NaN, dar în această revizuire suportul este permis (dar nu
necesar). Aceasta este o schimbare tăcută a comportamentului Wow programe; de exemplu, în
Localizare POSIX expresia:

("-INF" + 0 < 0)

anterior avea valoarea 0 deoarece „−INF” convertit la 0, dar acum poate avea valoarea 0 sau
1.

VIITOR INSTRUCTIUNI


Nici unul.

Utilizați awkposix online folosind serviciile onworks.net


Servere și stații de lucru gratuite

Descărcați aplicații Windows și Linux

Comenzi Linux

Ad




×
publicitate
❤️Cumpără, rezervă sau cumpără aici — gratuit, contribuind la menținerea serviciilor gratuite.