Domača » kako » Kakšna je razlika med enojnimi in dvojnimi citati v Bash Shell?

    Kakšna je razlika med enojnimi in dvojnimi citati v Bash Shell?

    Zapiranje besedila v narekovajih je dokaj običajna praksa v ukazni vrstici, še posebej, kadar gre za datoteke, ki imajo v imenih presledke, toda kako veste, ali naj uporabite enojne ali dvojne narekovaje? Oglejmo si razliko in kdaj uporabite eno proti drugi.

    Splošno pravilo je, da dvojni narekovaji še vedno omogočajo širjenje spremenljivk znotraj ponudb, enojni narekovaji pa ne. Nadaljuj z branjem.

    Citati s preprostim besedilom

    Če ste preprosto zaprli nekaj besed besedila, res ni pomembno, katero boste uporabili, saj bosta oba delovala popolnoma enako. Ta dva ukaza na primer ustvarita imenik, imenovan Test Directory:

    mkdir "Preizkusni imenik"
    mkdir "Preizkusni imenik"

    Bolj izkušeni tipi bodo verjetno opazili, da lahko uporabite tudi mkdir Test Directory, če ste želeli.

    Shell Variable Expansion

    Razlika med enojnimi in dvojnimi narekovaji postane pomembnejša, ko se ukvarjate s spremenljivkami v ukazni vrstici privzeto, bash bo razširil spremenljivko, kot je $ test, v celoten niz. Najprej bomo dodeli spremenljivko:

    test = "To je test"

    Sedaj lahko uporabite to spremenljivko v ukazni vrstici, kot je ta, ki jo morate preprosto izpisati To je preizkus v konzolo:

    echo $ test

    Tukaj je razlika med dvojnimi in enojnimi narekovaji jasnejša - pri uporabi enojnih narekovajev spremenljivke ne bomo razširili. Na primer, če zaženete ta ukaz:

    echo '$ test'

    Ko uporabite enojne narekovaje, v ukazni vrstici ne boste videli ničesar drugega kot »$ test«, vendar se bo pravilno izpisal, če uporabljate dvojne narekovaje:

    Ista stvar deluje, ko uporabite znak 'za razširitev ukaza v ukazni vrstici. Recimo, da ste želeli uporabiti pwd ukaz iz drugega ukaza - uporabili boste backticks za ukaz lupini, da ga razširi:

    echo 'pwd' / test

    Če ste bili v domači mapi, boste videli izhodne podatke, ki so izgledali takole:

    / home / geek / test

    Recimo, da ste v mapi, ki ima presledek v poti, in želite z ukazom ln ustvariti simbolno povezavo do datoteke v trenutnem imeniku. Običajno morate določiti celotno pot, ko uporabljate ukaz ln, zato je veliko lažje uporabiti 'pwd' za shranjevanje tipkanja.

    Poglejte, kaj se zgodi, ko poskusite uporabiti ukaz brez zaprtja v narekovajih:

    ln -s 'pwd' / test / home / geek / linkedname

    Namesto tega morate obkrožiti v narekovajih:

    ln -s "'pwd' / filename" / nekaj / drugo / pot

    Za bolj konkreten primer predpostavimo, da imamo strukturo map, kot je ta primer, kjer imajo vsa imena datotek presledke:

    Ker ukaz unzip ne podpira uporabe * za njegovo izvajanje za vse datoteke, namesto tega uporabite ukaz for. Tukaj so stvari zanimive:

    za f in * .zip; unzip $ f; končano

    Ups! Izgleda, da ni uspelo.

    Namesto tega moramo uporabiti dvojne narekovaje okoli spremenljivke $ f, kot je ta:

    za f in * .zip; unzip "$ f";

    Zdaj vsakič, ko ukaz za ukaz gre skozi zanko, bo dejansko zagnal ukaz, kot je ta:

    unzip "test 1.zip"

    Seveda bi se zanemaril in zagnal podoben ukaz za vsako datoteko v imeniku.

    Preglejmo

    Zdaj, ko smo pregledali primere, bomo hitro pregledali, če ste ga zamudili:

    Double Quotes

    • Uporabite, če želite vključiti spremenljivke ali uporabiti razširitev lupine znotraj niza.
    • Vsi znaki znotraj so interpretirani kot navadni znaki, razen za $ ali ', ki bodo razširjeni na lupini.

    Posamezni citati

    • Vsi znaki v enojnih narekovajih se razlagajo kot niz znakov.

    In tako se konča lekcija citatov. Uporabite jih pametno.