Koja je razlika između jednokratnih i dvostrukih citata u Bash Shellu?

Sadržaj:

Koja je razlika između jednokratnih i dvostrukih citata u Bash Shellu?
Koja je razlika između jednokratnih i dvostrukih citata u Bash Shellu?
Anonim
Priloženje teksta u navodnicima je prilično standardna praksa na naredbenom retku, posebno kada se radi o datotekama koje imaju razmake u imenima, ali kako znate hoćete li koristiti jednokratne ili dvostruke navodnike? Pogledajmo razliku i kada biste trebali koristiti jedan protiv drugog.
Priloženje teksta u navodnicima je prilično standardna praksa na naredbenom retku, posebno kada se radi o datotekama koje imaju razmake u imenima, ali kako znate hoćete li koristiti jednokratne ili dvostruke navodnike? Pogledajmo razliku i kada biste trebali koristiti jedan protiv drugog.

Opće pravilo je da dvostruki navodi još dopuštaju širenje varijabli unutar citata, a pojedinačni citati ne. Nastavi čitati.

Izrazi s jednostavnim tekstom

Ako jednostavno priložite nekoliko riječi teksta, nije važno koje ćete koristiti, jer će oboje raditi upravo isto. Na primjer, te dvije naredbe će stvoriti direktorij pod nazivom Test Directory:

mkdir 'Test Directory' mkdir 'Test Directory'

Iskusniji tipovi vjerojatno će primijetiti da biste mogli koristiti i mkdir Test Directory ako želite.

Shell varijabilno proširenje

Razlika između jednokratnih i dvostrukih navoda postaje važnija kada se bavite varijablama na naredbenoj liniji - prema zadanim postavkama, bash će proširiti varijablu poput $ testa u puni niz. Prvo ćemo dodijeliti varijablu:

test='This is a test'

Sada možete koristiti ovu varijablu na naredbenom retku, kao što je ovaj, koji bi trebao jednostavno izlaziti Ovo je test na konzolu:

echo $test

Evo gdje se razlika između dvostrukih i pojedinačnih navoda postaje jasnija - kada koristite pojedinačne citate, varijable neće biti proširene. Na primjer, ako pokrenete ovu naredbu:

echo '$test'

Na naredbenom retku nećete vidjeti ništa osim "$ test" kada koristite pojedinačne navodnike, ali će se ispravno prikazivati kada koristite dvostruke navodnike:

Image
Image

Isto radi kad koristite `znak za proširenje naredbe na naredbenom retku. Na primjer, kažete da ste htjeli upotrijebiti pwd naredba iz druge naredbe - upotrijebite povratne znakove da biste ih pročitali kako bi se proširila:

echo `pwd`/test

Ako ste bili u vašoj kućnoj mapi, vidjet ćete izlaz koji je izgledao ovako:

/home/geek/test

Recimo, na primjer, nalazite se u mapi koja ima razmak u putu, a želite upotrijebiti ln naredbu za stvaranje simboličke veze na datoteku u trenutnom direktoriju. Obično trebate navesti cijeli put kada koristite ln naredbu, tako da je puno lakše koristiti `pwd` za spremanje tipkanja.

Pogledajte što se događa kada pokušate upotrijebiti naredbu bez zatvaranja navoda:

ln –s `pwd`/test /home/geek/linkedname

Umjesto toga, morat ćete obuhvatiti navodnike:
Umjesto toga, morat ćete obuhvatiti navodnike:

ln –s '`pwd`/filename' /some/other/path

Za konkretniji primjer, pretpostavimo da imamo strukturu mapa poput ovog primjera, gdje svi nazivi datoteka sadrže razmake u njima:

Budući da naredba za unzip ne podržava upotrebu * da bi se pokrenula protiv svih datoteka, umjesto toga trebate upotrijebiti naredbu za. Evo gdje se stvari zanimaju:
Budući da naredba za unzip ne podržava upotrebu * da bi se pokrenula protiv svih datoteka, umjesto toga trebate upotrijebiti naredbu za. Evo gdje se stvari zanimaju:

for f in *.zip;do unzip $f;done

Uh! Izgleda da nije uspjelo.

Umjesto toga moramo upotrijebiti dvostruke navodnike oko $ f varijable, na primjer:
Umjesto toga moramo upotrijebiti dvostruke navodnike oko $ f varijable, na primjer:

for f in *.zip;do unzip '$f';done

Sada svaki put kad zapovijed za naredbu prođe kroz petlju, zapravo će pokrenuti naredbu poput ove:

unzip 'test 1.zip'

Naravno, to bi prolazilo i pokrenulo sličnu naredbu za svaku datoteku u direktoriju.

Pogledajmo

Sada kada smo prošli kroz primjere, brzo ćemo pregledati slučaj ako ste je propustili:

Dvostruki navodi

  • Koristite kada želite priložiti varijable ili upotrijebiti proširenje ljuske unutar niza.
  • Svi znakovi iznutra tumače se kao redoviti znakovi, osim za $ ili `koji će se proširiti na ljusci.

Pojedinačni citati

Svi znakovi unutar pojedinačnih navodnika tumače se kao niz znakova.

I tako završava lekcija citata. Koristite ih mudro.

Preporučeni: