Văd că în Bash> 4.0 variabila expansiune este utilizată pentru a scădea o variabilă. De exemplu
echo ${variable,,}
Citind pagina de manual nu știu de ce shell-ul transformă șirul în minuscule.
O expresie de secvență ia forma {x..y [.. incr]}, unde x și y sunt fie numere întregi sau caractere simple, iar incr, un increment opțional, este un număr întreg. Când sunt furnizate numere întregi, expresia se extinde la fiecare număr între x și y, inclusiv. Numerele întregi furnizate pot fi prefixate cu „0” pentru a forța fiecare termen să aibă aceeași lățime. Când x sau y începe cu un zero, shell-ul încearcă să forțeze toți termenii generați să conțină același număr de cifre, completând zero acolo unde este necesar. Când sunt furnizate caractere, expresia se extinde la fiecare caracter lexicografic între x și y, inclusiv, utilizând setările locale implicite C. Rețineți că atât x cât și y trebuie să fie de același tip. Când este furnizat incrementul, acesta este utilizat ca diferență între fiecare termen. Incrementul implicit este 1 o r -1 după caz.
De ce variabila este convertită în minuscule?
Răspuns
Citești secțiunea greșită a documentației; uitați-vă la extinderea parametrului shell .
${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}
Această extindere modifică cazul caracterelor alfabetice din
parameter
.pattern
este extins pentru a produce un model la fel ca în extinderea numelui de fișier. Fiecare caracter din valoarea extinsă aparameter
este testat în funcție depattern
și, dacă se potrivește cu modelul, majuscula este convertită. Modelul nu trebuie să încerce să se potrivească mai mult de un personaj. Operatorul „^” convertește modelul de potrivire a literelor mici în majuscule; operatorul „,” convertește literele majuscule potrivite în minuscule. Extensiile „^^” și „,,” convertesc fiecare caracter asociat în valoarea extinsă; expansiunile „^” și „,” se potrivesc și convertesc doar primul caracter din valoarea extinsă. Dacăpattern
este omis, acesta este tratat ca un „?”, Care se potrivește cu fiecare caracter. Dacăparameter
este ‘@’ sau ‘*’, operația de modificare a cazurilor se aplică pe rând la fiecare parametru pozițional, iar extinderea este lista rezultată. Dacăparameter
este o variabilă de matrice subscrisă cu @ sau *, operația de modificare a cazurilor se aplică la rândul său fiecărui membru al matricei, iar extinderea este lista rezultată.
Răspuns
Citiți partea pentru „Extindere bretele”, O „expansiune Brace” nu începe cu un $
.
Ar trebui să executați această comandă:
LESS=+/"\{parameter\^pattern\}" man bash
Pentru a găsi partea din „modificarea cazului” care începe cu un $
(${ ^^ }
).