Koduleht » kuidas » Mis vahe on üksikute ja kahekordsete hinnapakkumiste vahel Bash Shellis?

    Mis vahe on üksikute ja kahekordsete hinnapakkumiste vahel Bash Shellis?

    Tsitaatide tekstide lisamine on käsureal suhteliselt tavaline praktika, eriti siis, kui tegemist on failidega, mis sisaldavad nimesid tühikuid, kuid kuidas sa tead, kas kasutada ühe- või kahekordseid jutumärke? Vaatame erinevust ja kui peaksite kasutama ühte vs teist.

    Üldreegel on see, et kahekordsed jutumärgid võimaldavad veel muutujate laiendamist jutumärkides ja üksikuid hinnapakkumisi. Hoidke lugemist.

    Tsitaadid lihttekstiga

    Kui te lihtsalt lisate mõningaid teksti sõnu, siis ei ole see oluline, millist te kasutate, sest nad mõlemad töötavad täpselt sama. Näiteks need kaks käsku loovad kataloogi nimega Test Directory:

    mkdir "Test Directory"
    mkdir 'Test Directory'

    Kogenumad tüübid tähistavad tõenäoliselt, et sa võiksid kasutada ka mkdir Test.

    Shelli muutuv laiendamine

    Erinevus ühekordsete ja kahekordsete jutumärkide vahel muutub tähtsamaks siis, kui tegelete muutujate käsurealt vaikimisi, bash laiendab muutujat, nagu $ test, kogu stringiks. Esiteks määrame muutuja:

    test = "See on test"

    Nüüd saate seda muutujat kasutada käsureal, nagu see, mis peaks lihtsalt väljundi See on test konsoolile:

    echo $ test

    Siin on see, kus erinevus topelt- ja üksikute hinnapakkumiste vahel muutub selgemaks - kui kasutate üksikuid hinnapakkumisi, ei muutu muutujaid. Näiteks kui käivitate selle käsu:

    echo '$ test'

    Kui kasutate üksikuid hinnapakkumisi, näete käsurealt midagi, kuid „$ test”, kuid see väljastatakse korralikult, kui kasutate topelt jutumärke:

    Sama toimib ka siis, kui kasutate käsurea käsurea laiendamiseks märki. Näiteks öelge, et soovisite seda kasutada pwd käsk teisest käsust - sa kasutad tagaplaate, et öelda kesta laiendamiseks:

    kaja "pwd" / test

    Kui viibisite oma kodukataloogis, näeksite sellist väljundit:

    / kodu / geek / test

    Ütle näiteks, et olete kaustas, millel on tee sees olev tühik, ning soovite kasutada ln-käsku, et luua sümboolne link praeguses kataloogis olevale failile. Tavaliselt peate ln-käsu kasutamisel määrama kogu tee, nii et kirjutamise salvestamiseks on 'pwd' -i palju lihtsam kasutada.

    Vaadake, mis juhtub, kui proovite käsku kasutada ilma tsitaate lisamata:

    ln -s 'pwd' / test / home / geek / seotud nimi

    Selle asemel peate ümbritsema jutumärkides:

    ln -s "'pwd' / failinimi" / mõned / muu / tee

    Konkreetsema näite puhul oletame, et meil on selline näide nagu kausta struktuur, kus kõigis failinimedes on nendes tühikud:

    Kuna unzip-käsk ei toeta seda * kõigi failide käivitamiseks, peate selle asemel kasutama käsku for. Siin, kus asjad huvitavad:

    f jaoks * .zip; tee unzip $ f;

    Vabandust! Paistab, et see ei tööta.

    Selle asemel peame kasutama kahes hinnapakkumist $ f muutuja ümber, näiteks:

    f puhul * .zip-s, tehke unzip "$ f";

    Nüüd, iga kord, kui käsk läheb silmus läbi, hakkab see tegelikult käima nagu selline:

    unzip "test 1.zip"

    Muidugi oleks see silmus läbi ja käivitab sarnase käsu iga kataloogi faili jaoks.

    Vaatame läbi

    Nüüd, kui oleme näited läbi vaadanud, vaatame vaid kiiresti üle, kui te seda unustasite:

    Double Quotes

    • Kasutage, kui soovite lisada muutujaid või kasutada stringi laiendamist stringi sees.
    • Kõiki sümboleid tõlgendatakse tavaliste tähtedena, välja arvatud $ või ', mida laiendatakse kestale.

    Ühtsed hinnapakkumised

    • Kõiki üksikute jutumärkide sümboleid tõlgendatakse stringimärgina.

    Ja seega lõpeb jutumärkide õppetund. Kasutage neid targalt.