Koks skirtumas tarp vieno ir dvigubo citavimo "Bash Shell"?

Turinys:

Koks skirtumas tarp vieno ir dvigubo citavimo "Bash Shell"?
Koks skirtumas tarp vieno ir dvigubo citavimo "Bash Shell"?

Video: Koks skirtumas tarp vieno ir dvigubo citavimo "Bash Shell"?

Video: Koks skirtumas tarp vieno ir dvigubo citavimo "Bash Shell"?
Video: Google Advanced Search IN 3 minutes! - YouTube 2024, Kovas
Anonim
Teksto įterpimas kabutėse yra gana įprasta komandų eilutės praktika, ypač kalbant apie failus, kurių pavadinime yra tarpų, bet kaip žinote, ar naudoti vienodas ar dvigubas kabutes? Pažiūrėkime į skirtumą ir, kai turėtumėte naudoti vieną prieš kitą.
Teksto įterpimas kabutėse yra gana įprasta komandų eilutės praktika, ypač kalbant apie failus, kurių pavadinime yra tarpų, bet kaip žinote, ar naudoti vienodas ar dvigubas kabutes? Pažiūrėkime į skirtumą ir, kai turėtumėte naudoti vieną prieš kitą.

Bendra taisyklė yra ta, kad dvigubos kabutės vis dar leidžia keisti kintamuosius per kabutes, o vieno kabučių - ne. Laikykis skaitymo.

Citatos su paprastu tekstu

Jei tiesiog pridedate keletą teksto žodžių, tikrai nesvarbu, kokį tekstą naudojate, nes jie abu dirba vienodai. Pavyzdžiui, šios dvi komandos sukurs katalogą, pavadintą Test Directory:

mkdir 'Test Directory' mkdir 'Test Directory'

Labiau patyrę tipai tikriausiai pastebės, kad jūs taip pat galėtumėte naudoti mkdir testo katalogą.

"Shell" kintamasis išplėtimas

Skirtumas tarp vienos ir dvigubos kabučių tampa vis svarbesnis, kai jūs kalbate apie kintamuosius pagal komandų eilutę pagal numatytuosius nustatymus, bash ketina išplėsti tokį kintamąjį kaip $ test į visą eilutę. Pirma, priskirsime kintamąjį:

test='This is a test'

Dabar galite naudoti šį kintamąjį komandinėje eilutėje, pvz., Tai turėtų tiesiog išeiti Čia testas prie konsolės:

echo $test

Štai, kur skirtumas tarp dvigubo ir vieno kabučių tampa aiškesnis: kai naudojate atskirus kabučių, kintamieji nebus išplečiami. Pavyzdžiui, paleidus šią komandą:

echo '$test'

Kai naudosite atskirus kabučių, komandinės eilutės metu nematysite nieko kito, bet "$ test", tačiau jis bus tinkamai išvedamas, kai naudosite dvigubas kabutes:

Image
Image

Tas pats veikia, kai naudojate simbolį, norėdami išplėsti komandą komandinėje eilutėje. Pavyzdžiui, pasakykite, kad norite naudoti pwd komandą iš kitos komandos-jūs naudojate užpakalines kopijas, kad galėtumėte išplėsti apvalkalą:

echo `pwd`/test

Jei esate savo namų aplanke, pamatysite tokį produkciją:

/home/geek/test

Pasakykite, kad, pavyzdžiui, esate aplanke, kuriame yra kelio vieta, ir norite naudoti komandą ln sukurti simbolinę nuorodą į failą dabartiniame kataloge. Naudodamiesi ln komanda paprastai reikia nurodyti visą kelią, todėl daug lengviau naudoti "pwd", kad išsaugotumėte spausdinimą.

Pažiūrėkite, kas atsitinka bandant naudoti komandą be kabučių:

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

Vietoj to turėsite supainioti kabučių:
Vietoj to turėsite supainioti kabučių:

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

Kalbant konkretesniu pavyzdžiu, darome prielaidą, kad turime tokios aplankų struktūrą kaip šis pavyzdys, kuriuose visuose failų pavadinimuose yra tarpų:

Kadangi komanda "Unzip" nepalaiko "*", kad paleistumėte jį iš visų failų, jums reikės naudoti komandą "Command". Štai kur viskas įdomu:
Kadangi komanda "Unzip" nepalaiko "*", kad paleistumėte jį iš visų failų, jums reikės naudoti komandą "Command". Štai kur viskas įdomu:

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

Oi! Atrodo, kad neveikia.

Vietoj to, ką turėsime daryti, naudokitės dvigubomis kabutėmis aplink kintamąjį $ f, pavyzdžiui:
Vietoj to, ką turėsime daryti, naudokitės dvigubomis kabutėmis aplink kintamąjį $ f, pavyzdžiui:

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

Dabar kiekvieną kartą, kai komanda perduoda liniją, ji iš tikrųjų paleis tokią komandą kaip ši:

unzip 'test 1.zip'

Žinoma, tai būtų kilpa ir paleisti panašią komandą kiekvienam kataloge esančiam failui.

Pažiūrėkime

Dabar, kai peržiūrėjome pavyzdžius, mes tiesiog greitai peržiūrėsime, jei praleidote tai:

Dvigubos kotiruotės

  • Naudokite, kai norite pridėti kintamuosius arba naudoti plėtinio viduje eilutėje.
  • Visi simboliai yra interpretuojami kaip įprasti simboliai, išskyrus $ arba `, kurie bus išplečiami ant apvalkalo.

Vieni kolekcijos

Visi simboliai per vieną kabučių interpretuojami kaip eilutės simbolis.

Ir taip baigiasi pamokų citatos. Naudok juos išmintingai.

Rekomenduojamas: