Hva er forskjellen mellom enkle og doble tilbud i Bash Shell?
Vedleggstekst i anførselstegn er ganske vanlig praksis på kommandolinjen, spesielt når det gjelder å håndtere filer som har mellomrom i navnene, men hvordan vet du om du skal bruke enkle eller doble anførselstegn? La oss ta en titt på forskjellen, og når du skal bruke en vs den andre.
Den generelle regelen er at doble anførselstegn fortsatt tillater utvidelse av variabler i anførselstegnene, og enkeltnoteringer gjør det ikke. Fortsett å lese.
Sitater med enkel tekst
Hvis du bare vedlegger et par ord med tekst, spiller det ingen rolle hva du bruker, da de begge vil fungere akkurat det samme. For eksempel vil disse to kommandoene skape en katalog som heter Test Directory:
mkdir "Test Directory"
mkdir 'Test Directory'
Mer erfarne typer vil nok merke seg at du også kan bruke mkdir Test \ Directory hvis du vil.
Shell Variabel utvidelse
Forskjellen mellom enkle og dobbelte anførselstegn blir viktigere når du arbeider med variabler på kommandolinjen - som standard, bash skal utvide en variabel som $ test i hele strengen. Først tildeler vi variabelen:
test = "Dette er en test"
Nå kan du bruke denne variabelen på kommandolinjen, slik som dette, som bare skal utgjøre Dette er en test til konsollen:
ekko $ test
Her er hvor forskjellen mellom dobbelte og enkle anførselstegn blir tydeligere. Når du bruker enkle anførselstegn, vil variablene ikke bli utvidet. Hvis du for eksempel kjører denne kommandoen:
ekko '$ test'
Du ser ingenting annet enn "$ test" på kommandolinjen når du bruker enkle anførselstegn, men det vil bli sendt ut riktig når du bruker dobbelt anførselstegn:
Det samme fungerer når du bruker tegnet til å utvide en kommando på kommandolinjen. For eksempel, si at du ønsket å bruke pwd kommandoen fra en annen kommando-du bruker backticks for å fortelle skallet for å utvide det:
ekko 'pwd' / test
Hvis du var i din hjemmemappe, ser du utdata som så ut som dette:
/ Home / geek / test
Si for eksempel at du er i en mappe som har plass i banen, og du vil bruke kommandoen ln til å lage en symbolsk lenke til en fil i den nåværende katalogen. Du må vanligvis angi hele banen når du bruker kommandoen ln, så det er mye lettere å bruke 'pwd' for å lagre skrive.
Se hva som skjer når du prøver å bruke kommandoen uten å legge inn anførselstegn:
ln-s 'pwd' / test / home / geek / linkedname
I stedet må du omgir i sitater:
ln -s "pwd" / filnavn "/ litt / annet / bane
For et mer konkret eksempel, anta at vi har en mappestruktur som dette eksempelet, der alle filnavnene har mellomrom i dem:
Siden kommandoen Unzip ikke støtter å bruke * for å kjøre den mot alle filene, må du bruke kommandoen for i stedet. Her er ting som blir interessante:
for f i * .zip; gjør unzip $ f; ferdig
Oops! Ser ut som det ikke fungerte.
Hva vi trenger å gjøre i stedet, er å bruke doble anførselstegn rundt variabelen $ f, slik:
for f i * .zip; gjør unzip "$ f"; ferdig
Nå hver gang kommandoen går gjennom løkken, skal den faktisk kjøre en kommando som denne:
pakke ut "test 1.zip"
Selvfølgelig ville det løpe gjennom og kjøre en lignende kommando for hver fil i katalogen.
La oss vurdere
Nå som vi har gått gjennom eksemplene, vil vi raskt vurdere om du savnet det:
Double Quotes
- Bruk når du vil legge inn variabler eller bruk shell utvidelse inne i en streng.
- Alle tegn i er tolket som vanlige tegn bortsett fra $ eller 'som vil bli utvidet på skallet.
Enkelt sitater
- Alle tegn i enkelt anførselstegn tolkes som en strengkarakter.
Og dermed avsluttes leksjonen i sitatene. Bruk dem klokt.