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:
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
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:
for f in *.zip;do unzip $f;done
Oops! Ser ut som det ikke fungerte.
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.