If-Koubou

Care este diferența dintre cotele unice și cele duble în Bash Shell?

Care este diferența dintre cotele unice și cele duble în Bash Shell? (Cum să)

Introducerea textului în ghilimele este o practică destul de standard pe linia de comandă, mai ales când se ocupă de fișiere care conțin spații în nume, dar cum știți dacă să utilizați ghilimele simple sau duble? Să aruncăm o privire la diferența și când ar trebui să folosiți unul față de celălalt.

Regula generală este că ghilimele duble permit în continuare extinderea variabilelor în cadrul cotelor, iar citatele simple nu. Continua să citești.

Citate cu text simplu

Dacă pur și simplu închideți câteva cuvinte de text, nu contează cu adevărat pe ce folosiți, deoarece ambele vor funcționa exact la fel. De exemplu, aceste două comenzi vor crea atât un director numit Test Directory:

mkdir "Test Directory"
mkdir 'Test Directory'

Tipuri mai experimentate, probabil, rețineți că ați putea folosi și mkdir Test \ Directory dacă doriți.

Shell Extensie variabilă

Diferența dintre citatele simple și cele duble devine mai importantă atunci când aveți de-a face cu variabilele de pe linia de comandă; în mod implicit, bash va extinde o variabilă ca testul $ în șirul complet. Mai întâi, vom atribui variabila:

test = "Acesta este un test"

Acum puteți utiliza această variabilă pe linia de comandă, cum ar fi aceasta, care ar trebui să emită pur și simplu Acesta este un test la consola:

echo $ test

Iată în cazul în care diferența dintre ghilimele duble și cele simple devine mai clară - când utilizați citare simple, variabilele nu vor fi extinse. De exemplu, dacă executați această comandă:

echo '$ test'

Veți vedea numai "testul $" pe linia de comandă atunci când utilizați ghilimele simple, dar se va afișa corect atunci când utilizați ghilimele duble:

Același lucru funcționează atunci când utilizați caracterul "pentru a extinde o comandă pe linia de comandă. De exemplu, spuneți că doriți să utilizați PWD comanda dintr-o altă comandă - utilizați spații pentru a le spune coajă să-l extindă:

echo 'pwd' / test

Dacă v-ați afla în dosarul dvs. de domiciliu, ați vedea ieșirea care arăta astfel:

/ Home / tocilar / testare

Spuneți, de exemplu, că sunteți într-un dosar care are un spațiu în cale și doriți să utilizați comanda ln pentru a crea o legătură simbolică cu un fișier din directorul curent. De obicei, trebuie să specificați calea completă atunci când utilizați comanda ln, deci este mult mai ușor să utilizați 'pwd' pentru a salva tastarea.

Uită-te ce se întâmplă atunci când încerci să folosești comanda fără a include în citate:

ln -s 'pwd' / test / home / geek / linkname

În schimb, va trebui să înconjurați în citate:

ln -s "" pwd "/ nume fișier" / some / other / path

Pentru un exemplu mai concret, să presupunem că avem o structură de directoare ca acest exemplu, unde toate numele fișierelor au spații în ele:

Deoarece comanda de dezarhivare nu acceptă utilizarea * pentru a rula toate fișierele, va trebui să utilizați comanda for. Iată unde lucrurile devin interesante:

pentru f în * .zip; dezarhivați $ f; terminat

Hopa! Se pare că nu a funcționat.

Ceea ce trebuie să facem în schimb este să utilizați ghilimele în jurul variabilei $ f, cum ar fi:

pentru f în * .zip; dezarhivați "$ f";

Acum de fiecare dată când comanda trece prin bucla, va executa de fapt o comandă ca aceasta:

unzip "test 1.zip"

Bineînțeles că va trece printr-o comandă similară pentru fiecare fișier din director.

Să recapitulăm

Acum, că am trecut prin exemple, vom examina rapid în cazul în care ați pierdut-o:

Citate dublă

  • Utilizați când doriți să închideți variabilele sau să folosiți extensia shell-ului în interiorul unui șir.
  • Toate caracterele din interiorul sunt interpretate ca caractere obișnuite, cu excepția celor $ sau 'care vor fi extinse pe shell.

Citate unice

  • Toate caracterele din citatele singulare sunt interpretate ca un caracter șir.

Și astfel sfârșește lecția citatelor. Utilizați-le cu înțelepciune.