If-Koubou

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

Koja je razlika između jednokratnih i dvostrukih citata u Bash Shellu? (Kako da)

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 = "Ovo je 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:

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 / monstrum / 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 / povezani naziv

Umjesto toga, morat ćete obuhvatiti navodnike:

ln -s "" pwd '/ filename "/ neki / drugi / put

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:

za f u * .zip; unzip $ f; učinjeno

Uh! Izgleda da nije uspjelo.

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

za f u * .zip; unzip "$ f" učinjeno

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čeni su kao regularni znakovi osim $ 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.