Hva er forskjellen mellom enkle og doble tilbud i Bash Shell?

Innholdsfortegnelse:

Hva er forskjellen mellom enkle og doble tilbud i Bash Shell?
Hva er forskjellen mellom enkle og doble tilbud i Bash Shell?

Video: Hva er forskjellen mellom enkle og doble tilbud i Bash Shell?

Video: Hva er forskjellen mellom enkle og doble tilbud i Bash Shell?
Video: Google Advanced Search IN 3 minutes! - YouTube 2024, April
Anonim
Vedlegg av tekst 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 se på forskjellen, og når du skal bruke en mot den andre.
Vedlegg av tekst 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 se på forskjellen, og når du skal bruke en mot den andre.

Den generelle regelen er at doble anførselstegn fortsatt tillater utvidelse av variabler i anførselstegnene, og enkelte anførselstegn 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='This is a test'

Nå kan du bruke denne variabelen på kommandolinjen, slik som denne, som bare skal utdata Dette er en test til konsollen:

echo $test

Her er forskjellen mellom dobbelte og enkle anførselstegn tydeligere. Når du bruker enkle sitater, vil variablene ikke bli utvidet. Hvis du for eksempel kjører denne kommandoen:

echo '$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:

Image
Image

Det samme virker når du bruker `tegnet for å utvide en kommando på kommandolinjen. For eksempel, si at du ønsket å bruke pwd kommandoen fra en annen kommando-du bruker backticks for å fortelle skallet å utvide det:

echo `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 en 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 ln-kommandoen, 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:
I stedet må du omgir i sitater:

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

For et mer konkret eksempel, la oss 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:
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 in *.zip;do unzip $f;done

Oops! Ser ut som det ikke fungerte.

Hva vi trenger å gjøre i stedet, er å bruke dobbelt anførselstegn rundt variabelen $ f, slik:
Hva vi trenger å gjøre i stedet, er å bruke dobbelt anførselstegn rundt variabelen $ f, slik:

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

Nå hver gang kommandoen går gjennom løkken, skal den faktisk kjøre en kommando som denne:

unzip '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 bare 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 tegnene er tolket som vanlige tegn med unntak av $ eller `som vil bli utvidet på skallet.

Enkelt sitater

Alle tegn i enkelt anførselstegn tolkes som en strengkarakter.

Og dermed slutter leksjonen i sitatene. Bruk dem klokt.

Anbefalt: