If-Koubou

Mikä on ero yhden ja kaksoisjoukon välillä Bash Shellissä?

Mikä on ero yhden ja kaksoisjoukon välillä Bash Shellissä? (Miten)

Tekstin lisääminen lainausmerkkeihin on melko tavanomainen käytäntö komentorivillä, varsinkin kun käsitellään tiedostoja, joilla on välilyöntejä nimeissä, mutta miten tiedät, käytetäänkö yksittäisiä tai kaksoispisteitä? Katsotaanpa eroa, ja kun käytät toisiaan vastaan.

Yleissääntönä on, että kaksoismerkit sallivat edelleen muuttujien laajentamisen lainausmerkkien sisällä, ja yksittäiset lainaukset eivät. Jatka lukemista.

Lainaukset yksinkertaisella tekstillä

Jos lisäät vain muutaman sanan tekstiä, sillä ei ole väliä, mitä käytät, sillä ne toimivat täsmälleen samalla tavalla. Esimerkiksi nämä kaksi komentoa muodostavat sekä hakemisto nimeltä Test Directory:

mkdir "Test Directory"
mkdir 'Test Directory'

Kokeneempi tyyppi todennäköisesti huomaa, että voit myös käyttää mkdir Test \ Directory, jos haluat.

Shell Variable Expansion

Yksittäis- ja kaksoisotosten välinen ero on tärkeämpi, kun käsittelette muuttujia komentorivillä - oletusarvoisesti bash aikoo laajentaa muuttujaa $ testiksi täysiin merkkijonoon. Ensin määritetään muuttuja:

test = "Tämä on testi"

Nyt voit käyttää tätä muuttujaa komentorivillä, kuten tämä, joka pitäisi vain tuottaa Tämä on testi konsoliin:

echo $ testi

Tällöin ero kaksinkertaisen ja yhden lainauksen välillä muuttuu selvemmäksi. Kun käytät yksittäisiä lainauksia, muuttujia ei tule laajentamaan. Jos esimerkiksi suoritat tämän komennon:

echo '$ test'

Komentorivillä ei näy muuta kuin "$ test", kun käytät yksittäisiä lainauksia, mutta se tulostaa oikein, kun käytät kaksoisvetotarvoja:

Sama asia toimii, kun käytät komentoa komentorivin laajentamiseen. Oletetaan esimerkiksi, että halusit käyttää pwd komennon toisesta komennosta - käytät vastaavia ohjeita kuoren laajentamiseksi:

echo 'pwd' / testi

Jos olit kotikansioosi, näet tuotoksen, joka näytti näin:

/ Home / pelle / testi

Sano esimerkiksi, että olet kansio, jolla on tilaa polussa, ja haluat käyttää ln-komentoa luomaan symbolisen linkin nykyisen hakemiston tiedostoon. Sinun on yleensä määriteltävä koko polku käytettäessä ln-komentoa, joten on paljon helpompaa käyttää 'pwd' tallentaaksesi kirjoittamisen.

Katso, mitä tapahtuu, kun yrität käyttää komentoa sulkematta lainauksia:

ln -s 'pwd' / testi / home / geek / linkitetty nimi

Sen sijaan sinun on ympäröitävä lainausmerkkejä:

ln -s "" pwd "/ tiedostonimi" / osa / muu / polku

Konkreettisemmaksi esimerkiksi oletetaan, että meillä on tämän esimerkin kansiorakenne, jossa kaikilla tiedostonimillä on välilyöntejä:

Koska unzip-komento ei tue * käyttämään sitä kaikkia tiedostoja vastaan, sinun on käytettävä command for -komentoa. Täältä asiat kiinnostavat:

f in * .zip; tee unzip $ f; tehty

Oho! Näyttää siltä, ​​ettei se toimi.

Sen sijaan meidän on käytettävä kaksinkertaisia ​​lainauksia $ f -muuttujan ympärillä, kuten:

f: lle * .zip; poista unzip "$ f" tehdyksi

Nyt joka kerta kun komento menee silmukan läpi, se ajaa itse asiassa tällaisen komennon:

unzip "test 1.zip"

Tietenkin se lukisi ja suoritti samanlaisen komennon jokaiselle hakemiston tiedostolle.

Katsotaanpa

Nyt kun olemme käyneet läpi esimerkkejä, me vain tarkastelemme nopeasti, jos olet unohtanut sen:

Double Quotes

  • Käytä, kun haluat liittää muuttujat tai käyttää kuoren laajennusta merkkijonon sisällä.
  • Kaikki sisäiset merkit tulkitaan tavallisiksi merkiksi, paitsi $ tai ', jotka laajennetaan kuoressa.

Yksittäiset lainaukset

  • Kaikki yksittäisten lainausmerkkien merkit merkitään merkkijonoiksi.

Ja siten päättyy kurssin oppitunti. Käytä niitä viisaasti.